Django 限制DRF中外键的选择
我有模型商品:Django 限制DRF中外键的选择,django,django-rest-framework,Django,Django Rest Framework,我有模型商品: class Commodity(models.Model): shop = models.ForeignKey(Shop, related_name='commodity', on_delete=models.CASCADE) brand = models.ForeignKey(Brand, blank=True, null=True, on_delete=models.CASCADE) price_old = models.DecimalField(ma
class Commodity(models.Model):
shop = models.ForeignKey(Shop, related_name='commodity', on_delete=models.CASCADE)
brand = models.ForeignKey(Brand, blank=True, null=True, on_delete=models.CASCADE)
price_old = models.DecimalField(max_digits=10, decimal_places=2)
price_new = models.DecimalField(max_digits=10, decimal_places=2)
我尝试使用将选项限制为,但没有成功。
我有一个序列化程序:
class CommoditySerializer(serializers.ModelSerializer):
image = CommodityImageSerializer(many=False)
def get_queryset(self):
user = self.context['request'].user
queryset = Commodity.objects.filter(shop__company__user=user)
return queryset
class Meta:
model = Commodity
fields = ('id', 'shop', 'brand', 'price_old', 'price_new')
这也帮不了我。
最后我有了一个常规的CreateAPIView,这个方法也帮不了我。
如何限制外键的使用?我需要让我的用户创建商品只在用户的商店。谢谢 我想您可以简单地实现此方法:
class CommoditySerializer(serializers.ModelSerializer):
image = CommodityImageSerializer(many=False)
def validate_shop(self, value):
user = self.context['request'].user
if value.company.user == user:
return value
raise serializers.ValidationError('Invalid shop!')
class Meta:
model = Commodity
fields = ('id', 'shop', 'brand', 'price_old', 'price_new')
我认为这是一种将所有最终验证留给前端的好做法,对吗?(我的意思是所有用户看不到但可以使用的商店)@D.Make no,在前端保留验证根本不是一个好做法。在您的情况下,您应该先在后端筛选商店,然后再将其返回到前端。@newerwinner我想知道您的答案。序列化程序验证允许fronend获得所有商店的列表,并且不允许选择非用户商店。是否可以,后端显示完整的商店列表,即使是那些用户不能使用的商店?@D.MakeCommoditySerializer
根本不返回商店对象。我不知道你在哪个视图中把商店发送到前端,但是过滤应该在那里执行。我是关于HTML表单的,它显示了我的选择。正如我现在所理解的,它只是为了测试而制作的,应该在开发之后关闭。当然,我有品牌过滤。谢谢