【问题标题】:Serialization and permissions in Django Rest FrameworkDjango Rest Framework 中的序列化和权限
【发布时间】:2018-11-29 08:38:35
【问题描述】:

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

据我了解,只读字段允许我进一步添加或编辑 Outwear 对象,但我应该有 2 种类型的许可:

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

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

【问题讨论】:

  • 你能解释一下用户角色吗?公司和用户是不同的模型吗??
  • @MohammadAli 已编辑。

标签: django serialization django-rest-framework django-serializer


【解决方案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)

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

【讨论】:

  • 此视图向所有用户显示所有活动商品。我需要让所有用户只能阅读活动商品。还可以让公司创建新商品并编辑他们创建的商品。谢谢!
  • 您的身份验证是用户而非公司。您应该具有用户模型的角色。然后创建一个权限类。在这个类中你可以说如果用户是公司可以创建或编辑商品
猜你喜欢
  • 2014-01-31
  • 1970-01-01
  • 2014-08-08
  • 1970-01-01
  • 2016-06-17
  • 2014-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多