首页 > 解决方案 > Django Rest Framework 中的序列化和权限

问题描述

我是 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)

所以我想像这样制作一个序列化器:

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 对象,但我应该有两种类型的许可:

  1. 所有用户只能看到活动的 Commodity 对象。
  2. 只有公司可以创建和编辑自己的对象。

我需要制作 2 个序列化器模型read_only=True/False吗?最佳做法是什么?我在哪里可以找到熟悉的东西的好例子?我打电话给用户 - 未经授权的用户。公司是授权用户。谢谢!

标签: djangoserializationdjango-rest-frameworkdjango-serializer

解决方案


对于你的第一个问题:

class CommoditySerializer(ModelSerializer):
    class Meta:
        model = Commodity
        fields = (shop, price)


Class CommodityActiveAPIView(generics.ListAPIView):
    serializer_class = serializers.CommoditySerializer
    queryset = Commodity.objects.filter(active=True)

第二个问题模棱两可。请先定义用户角色


推荐阅读