我有以下问题:我有一个 manytomanyfield(在模型 Toppings 中),我无法填充它。我首先尝试使用 list 和 set(),然后尝试在 views.py 中仅使用一个对象和 add(),但两者都不会返回任何内容。我一直在查看文档和其他论坛问题,但我无法弄清楚。任何帮助是极大的赞赏!视图.pyfrom django.contrib.auth import authenticate, login, logoutfrom django.contrib.auth.models import Userfrom django.core import serializersfrom django.http import HttpResponse, HttpResponseRedirect, JsonResponsefrom django.shortcuts import renderfrom django.urls import reversefrom orders.models import Meal, Topping, Orderdef order(request): # Request should be ajax and method should be POST. if request.is_ajax and request.method == "POST": # Get IDs of meal, topping(s) and user idmeal = request.POST["idmeal"] idmeal = Meal.objects.get(pk = idmeal) # Topping[] is a list of numbers representing IDs for Topping database topping = request.POST.getlist('topping[]') for i in range(0, len(topping)): topping[i] = int(topping[i]) user = request.user userID = User.objects.get(username=user.username) topping = Topping.objects.filter(pk__in=topping) print(topping) # Create object in Order table order = Order.objects.create(customerID = userID, mealID = idmeal, price = 12, status = "pending") # Add values to ManyToManyField order.toppingsID.set(topping) print(order.toppingsID) return JsonResponse({"success": ""}, status=200) else: # some error occured return JsonResponse({"error": ""}, status=400)模型.pyfrom django.db import modelsfrom django.contrib.auth.models import User# Create your models here.class Meal(models.Model): meal = models.CharField(max_length=64) classname = models.CharField(max_length=64) price = models.DecimalField(max_digits=5, decimal_places=2) def __str__(self): return f"{self.meal} ({self.classname}) ({self.price}) (id: {self.id})"
1 回答

翻阅古今
TA贡献1780条经验 获得超5个赞
问题不在于设置或添加到您的字段。问题是打印您的字段。
为了打印 a 的成员ManyToManyField
,您需要全部.all()
(或.filter()
添加到管理器的任何其他功能),例如:
print(order.toppingsID.all())
如果您打印经理,它确实会打印ModelName.None
. 例如Meal.objects
会做同样的事情。正是通过使用Meal.objects.all()
,您构建了一个QuerySet
.
添加回答
举报
0/150
提交
取消