添加到manymany字段返回空查询集



我试图在多对多字段中添加项目。添加后,我得到一个空的查询集。我快疯了。

if request.user.is_authenticated:
order = Order.objects.create(restaurant=Restaurant.objects.get(code_name=restaurant_code),
table=Table.objects.get(code_name=request.data['table']),
customer=request.user
)
else:
order = Order.objects.create(restaurant=Restaurant.objects.get(code_name=restaurant_code),
table=Table.objects.get(code_name=request.data['table'])
)
for menuitem in request.data['menuItems']:
customList = [ItemType.objects.get(id=v) for v in list(menuitem['addOns'])]
orderedMenuItem = OrderedMenuItem.objects.create(quantity=menuitem['quantity'],
menuitem=MenuItem.objects.get(pk=menuitem['id']),
remarks=menuitem['remarks'])
orderedMenuItem.custom_item_types.add(*customList)
order.ordered_menu_items.add(orderedMenuItem)
order.save()

这里我有ItemType作为许多许多字段得到orderedMenuItem模型。当尝试将ItemType对象添加到OrderedMenuItem模型时,它给出空查询集。

我的模型:

OrderedMenuItem


class OrderedMenuItem(models.Model):
menuitem = models.ForeignKey(MenuItem, on_delete=models.SET_NULL, null=True)
quantity = models.IntegerField()
custom_item_types = models.ManyToManyField(ItemType, blank=True, related_name='custom_item_types')
remarks = models.CharField(max_length=100, blank=True, null=True)

ItemType:

class ItemType(models.Model):
name = models.CharField(max_length=40)
cost = models.FloatField(default=0)
price = models.FloatField(default=0)
is_deleted = models.BooleanField(default=False)
def __str__(self):
return self.name

我最近也遇到了这个问题(第一次使用Django开发),在其他搜索中没有得到答案,然后我自己发现了这个错误。

我的问题是,我声明ManyToManyFields没有"through"参数。所以在你的例子中,可以把这行改成:

custom_item_types = models。ManyToManyField(ItemType, blank=True, related_name='custom_item_types')

:

custom_item_types = models。ManyToManyField(ItemType, blank=True, related_name='custom_item_types', through= ")

注意:在我的例子中,manymany关系有我需要的额外列,所以我定义了我自己的中介(https://docs.djangoproject.com/en/3.2/topics/db/models/#extra-fields-on-many-to-many-relationships)。

最新更新