我有一个简单ModelSerializer:Django的REST框架 - 过滤器外键项POST,PUT和PATCH
class OfferSerializer(serializers.ModelSerializer):
class Meta:
model = Offer
fields = ('id', 'accepted', 'comment', 'status', 'item_given', 'item_received')
在这种模式下:
class Offer(models.Model):
accepted = models.BooleanField()
status = models.BooleanField()
comment = models.CharField(max_length=1000)
creation_date = models.DateTimeField("date published", default=timezone.now)
item_given = models.ForeignKey("items.Item", related_name='item_given', on_delete=models.CASCADE)
item_received = models.ForeignKey("items.Item", related_name='item_received', on_delete=models.CASCADE)
def __str__(self):
return self.comment
而且它由以下几种观点:
class OfferViewSet(viewsets.ModelViewSet):
queryset = Offer.objects.all()
serializer_class = OfferSerializer
外键item_given是另一个名为Item的模型,它在用户上有一个外键。
在django rest框架的生成表单中,我可以在创建新商品时为item_given字段选择任何商品。但我希望能够仅选择外键用户等于request.user的项目。
我试着编辑串行器中的def_queryset,但没有成功。 我怎样才能做到这一点?
我在一个帐户谁没有创建项目,但我得到的每一件物品。
https://i.stack.imgur.com/bVfxo.png
目前我正在登录与用户ID为3
{
id: 1,
name: "asasd",
description: "sdffsd",
price_min: 123,
price_max: 234,
creation_date: "2016-11-15T17:35:11Z",
archived: false,
owner: 1,
category: 1,
image_set: [ ]
},
{
id: 2,
name: "sdfsdffiss",
description: "fsdfsd",
price_min: 124,
price_max: 1245,
creation_date: "2016-11-15T19:39:02.225543Z",
archived: false,
owner: 1,
category: 1,
image_set: [ ]
},
{
id: 8,
name: "Test",
description: "Test",
price_min: 123,
price_max: 234,
creation_date: "2016-11-15T20:42:34.492041Z",
archived: false,
owner: 3,
category: 1,
image_set: [
5
]
}
当我去创建一个新的报价,每一个项目在item_given字段中显示的
我拥有试了一下,只写了“item_given__owner”而不是“item_given__user”,因为外键在Item模型中被命名为owner,但我仍然得到列表中的每个项目。我添加了一个显示下拉列表的图像。 – Servietsky
您添加的图像已损坏。不过,你可以调试返回的报价,看看它们中的一些在'item_given.owner'中是否真的有不同的用户?因为如果确实如此,我唯一的猜测就是你正在打错视图,或者由于其他奇怪的原因'get_queryset'没有被执行。 – lucasnadalutti
我已经添加了项目的输出。什么可以防止'get_queryset'被执行? – Servietsky