Django Rest Framework 中的序列化和权限
Serialization and permissions in 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 对象,但我应该有 2 种类型的许可:
- 所有用户只能看到活动的商品对象。
- 只有公司可以创建和编辑自己的对象。
我需要为 read_only=True/False
制作 2 个序列化器模型吗?
最佳实践是什么?我在哪里可以找到熟悉的好例子?
我打电话给用户 - 未经授权的用户。公司是授权用户。
谢谢!
第一个问题:
class CommoditySerializer(ModelSerializer):
class Meta:
model = Commodity
fields = (shop, price)
Class CommodityActiveAPIView(generics.ListAPIView):
serializer_class = serializers.CommoditySerializer
queryset = Commodity.objects.filter(active=True)
第二个问题有歧义。请首先定义用户角色
我是 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 对象,但我应该有 2 种类型的许可:
- 所有用户只能看到活动的商品对象。
- 只有公司可以创建和编辑自己的对象。
我需要为 read_only=True/False
制作 2 个序列化器模型吗?
最佳实践是什么?我在哪里可以找到熟悉的好例子?
我打电话给用户 - 未经授权的用户。公司是授权用户。
谢谢!
第一个问题:
class CommoditySerializer(ModelSerializer):
class Meta:
model = Commodity
fields = (shop, price)
Class CommodityActiveAPIView(generics.ListAPIView):
serializer_class = serializers.CommoditySerializer
queryset = Commodity.objects.filter(active=True)
第二个问题有歧义。请首先定义用户角色