我有以下問題:我有一個 manytomanyfield(在模型 Toppings 中),我無法填充它。我首先嘗試使用 list 和 set(),然后嘗試在 views.py 中僅使用一個對象和 add(),但兩者都不會返回任何內(nèi)容。我一直在查看文檔和其他論壇問題,但我無法弄清楚。任何幫助是極大的贊賞!視圖.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貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超5個贊
問題不在于設(shè)置或添加到您的字段。問題是打印您的字段。
為了打印 a 的成員ManyToManyField
,您需要全部.all()
(或.filter()
添加到管理器的任何其他功能),例如:
print(order.toppingsID.all())
如果您打印經(jīng)理,它確實(shí)會打印ModelName.None
. 例如Meal.objects
會做同樣的事情。正是通過使用Meal.objects.all()
,您構(gòu)建了一個QuerySet
.
添加回答
舉報
0/150
提交
取消