首页 文章

Django Rest Framework中的序列化和权限

提问于
浏览
0

我是Django和DRF的新手,对序列化有疑问 . 我有模特:

class Commodity(models.Model):
    shop = models.ForeignKey(Company, on_delete=models.PROTECT)
    price = models.DecimalField(max_digits=10, decimal_places=2)
    active = models.BooleanField(default=False)

class Clother(models.Model):
    commodity = models.ForeignKey(Commodity, related_name='commodity', on_delete=models.CASCADE)
    color = models.ManyToManyField(Color, related_name='color')
    material = models.ManyToManyField(Material, related_name='material')
    gender = models.CharField(max_length=2, choices=GENDER_CHOICES, default=UNISEX)

class Outwear(models.Model):
    clother = models.ForeignKey(Clother, on_delete=models.CASCADE)
    name = models.CharField(max_length=30, blank=True)
    outwear_type = models.ForeignKey(OutwearType, on_delete=models.CASCADE)
    size = models.ManyToManyField(ClotherSize)

所以我想制作一个像这样的Serializer:

class OutwearSerializer(serializers.ModelSerializer):
    commodity = CommoditySerializer(many=False, read_only=False)
    clother = ClotherSerializer(many=False, read_only=False)
    class Meta:
        model = Outwear
        fields = ('commodity', 'clother', 'name', 'outwear_type', 'size')

据我所知,read_only字段让我可以进一步添加或编辑Outwear对象,但我应该有2种类型的permition:

  • 所有用户只能看到活动的商品对象 .

  • 只有公司可以创建和编辑自己的对象 .

我是否需要为 read_only=True/False 制作2个串行器模型?什么是最佳实践,在哪里可以找到熟悉的好例子?我称之为用户 - 未授权用户 . 公司是授权用户 . 谢谢!

1 回答

  • 1

    对于你的第一个问题:

    class CommoditySerializer(ModelSerializer):
        class Meta:
            model = Commodity
            fields = (shop, price)
    
    
    Class CommodityActiveAPIView(generics.ListAPIView):
        serializer_class = serializers.CommoditySerializer
        queryset = Commodity.objects.filter(active=True)
    

    第二个问题含糊不清 . 首先定义用户角色

相关问题