我试图在多对多字段中添加项目。添加后,我得到一个空的查询集。我快疯了。
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)。