为了账号安全,请及时绑定邮箱和手机立即绑定

set() 和 add() django 都没有添加到数据库条目

set() 和 add() django 都没有添加到数据库条目

摇曳的蔷薇 2022-11-01 15:53:43
我有以下问题:我有一个 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.


查看完整回答
反对 回复 2022-11-01
  • 1 回答
  • 0 关注
  • 111 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号