簡體   English   中英

set() 和 add() django 都不添加到數據庫條目

[英]Neither set() nor add() django add to database entry

我有以下問題:我有一個 manytomanyfield(在 model Toppings 中),我無法填充它。 我首先嘗試使用 list 和 set(),然后嘗試在 views.py 中僅使用一個 object 和 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})"

# Create your models here.
class Topping(models.Model):
  topping = models.CharField(max_length=64)
  classname = models.CharField(max_length=64)
  price = models.DecimalField(max_digits=5, decimal_places=2, null=True, blank=True)

  def __str__(self):
          return f"{self.topping} ({self.classname}) ({self.price}) (id: {self.id})"

class Order(models.Model):
    customerID = models.ForeignKey(User, on_delete=models.CASCADE)
    mealID = models.ForeignKey(Meal, on_delete=models.CASCADE)
    toppingsID = models.ManyToManyField(Topping, blank=True)
    price = models.DecimalField(max_digits=5, decimal_places=2)
    status = models.CharField(max_length=64)

    def __str__(self):
        return f"{self.customerID} has ordered {self.mealID} with {self.toppingsID} which costs {self.price} (status : {self.status})"

問題在於設置或添加到您的字段。 問題是打印您的字段。

為了打印ManyToManyField的成員,您需要全部 .all( .all() (或.filter()或您添加到經理的任何其他 function ),例如:

print(order.toppingsID.all())

如果您打印經理,它確實會打印ModelName.None 例如Meal.objects也會這樣做。 正是通過使用Meal.objects.all()來構造一個QuerySet

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM