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

我有以下问题:我有一个 manytomanyfield(在模型 Toppings 中),我无法填充它。我首先尝试使用 list 和 set(),然后尝试在 views.py 中仅使用一个对象和 add(),但两者都不会返回任何内容。我一直在查看文档和其他论坛问题,但我无法弄清楚。任何帮助是极大的赞赏!


视图.py


from django.contrib.auth import authenticate, login, logout

from django.contrib.auth.models import User

from django.core import serializers

from django.http import HttpResponse, HttpResponseRedirect, JsonResponse

from django.shortcuts import render

from django.urls import reverse


from orders.models import Meal, Topping, Order


def 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)

模型.py


from django.db import models

from 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})"



摇曳的蔷薇
浏览 112回答 1
1回答

翻阅古今

问题不在于设置或添加到您的字段。问题是打印您的字段。为了打印 a 的成员ManyToManyField,您需要全部.all()(或.filter()添加到管理器的任何其他功能),例如:print(order.toppingsID.all())如果您打印经理,它确实会打印ModelName.None. 例如Meal.objects会做同样的事情。正是通过使用Meal.objects.all(),您构建了一个QuerySet.
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python