django - 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 对象,但我应该有两种类型的许可:
- 所有用户只能看到活动的 Commodity 对象。
- 只有公司可以创建和编辑自己的对象。
我需要制作 2 个序列化器模型read_only=True/False
吗?最佳做法是什么?我在哪里可以找到熟悉的东西的好例子?我打电话给用户 - 未经授权的用户。公司是授权用户。谢谢!
解决方案
对于你的第一个问题:
class CommoditySerializer(ModelSerializer):
class Meta:
model = Commodity
fields = (shop, price)
Class CommodityActiveAPIView(generics.ListAPIView):
serializer_class = serializers.CommoditySerializer
queryset = Commodity.objects.filter(active=True)
第二个问题模棱两可。请先定义用户角色
推荐阅读
- typescript - 类型'区域
' 不能使用 @types/d3 分配给类型 'String' - java - Jackson - 在没有自定义序列化程序的情况下更改 Map 键名
- r - 如何在函数中使用命名变量
- swift - 在 Swift 中将 Double 作为 NS 对象写入文件
- javascript - 函数中的promise和var等于promise之间的Javascript区别
- bind9 - bind9 中的客户端特定设置
- vb.net - 还记得上次使用的函数/将函数存储在变量中吗?
- c++ - C++ 确定二进制文件是否可写和可更新(它没有运行)
- c++ - 将平移应用于特征顶点
- vba - 多次复制行(在单元格中给出)并根据单元格添加唯一的 ID 号