简体   繁体   English

我不能在 django 中向我的 models.py 添加列表吗?

[英]Can't I add a list to my models.py in django?

I'm quite new in Django and in this project I need to manage information about a restaurant.我是 Django 的新手,在这个项目中我需要管理有关餐厅的信息。 The problem is that I can't add more than one ingredient required to a recipe问题是我不能添加超过一种食谱所需的成分

问题照片

My models.py is this:我的models.py是这样的:

from django.db import models

# Create your models here.
    
class Ingredient(models.Model):
    name = models.CharField(max_length=35)
    quantity = models.IntegerField()
    unit = models.CharField(max_length=5)
    unit_price = models.FloatField()

    def __str__(self):
        return self.name

class MenuItem(models.Model):
    title = models.CharField(max_length=35)
    price = models.FloatField()
    example = models.ImageField()

    def __str__(self):
        return self.title

class RecipeRequirement(models.Model):
    menu_items = models.ForeignKey(MenuItem, default = 1,  on_delete=models.SET_DEFAULT)
    ingredient = models.CharField(max_length=35)
    quantity = models.FloatField()
    def __str__(self):
        return str(self.menu_items)


class Purchase(models.Model):
    menu_item = models.ForeignKey(MenuItem, default=1, on_delete=models.SET_DEFAULT)
    timestamp = models.DateTimeField()

    def __str__(self):
        return 'Purchase ' + str(self.menu_item) + str(self.timestamp)

After replacing ingredients = models.CharField() for ingredients = models.ManyToManyField() a list of all ingredients appear:ingredients = models.CharField()替换为ingredients = models.ManyToManyField()后,出现所有成分的列表:

在此处输入图像描述

But when I add a new ingredient to my Ingredient model, it automatically appears in every single menu_item :但是当我向我的Ingredient model 添加新成分时,它会自动出现在每个menu_item中:

在此处输入图像描述

You need to have a ManyToMany relationship in your RecipeRequirement model. This will allow you to select multiple ingredients for any one RecipeRequirement object. Read more here: Django ManyToMany Fields您需要在 RecipeRequirement model 中建立多对多关系。这将允许您为任何一个 RecipeRequirement object 提供 select 多种成分。在此处阅读更多信息: Django ManyToMany 字段

class RecipeRequirement(models.Model):
    menu_items = models.ForeignKey(MenuItem, default = 1,  on_delete=models.SET_DEFAULT)
    ingredients = models.ManyToManyField(Ingredient)
    quantity = models.FloatField()

    def __str__(self):
        return str(self.menu_items)

Set ingredients in the RecipeRequirement class as a ManyToMany field on the Ingredient class:将 RecipeRequirement class 中的成分设置为 Ingredient class 上的 ManyToMany 字段:

class RecipeRequirement(models.Model):
    menu_items = models.ForeignKey(MenuItem, default = 1,  on_delete=models.SET_DEFAULT)
    ingredients = models.ManyToManyField(Ingredient)
    quantity = models.FloatField()
    def __str__(self):
        return str(self.menu_items)

I believe that your Ingredient class must have a ForeignKey associated with the RecipeRequirement in order to add more than one ingredient related to the recipe.我相信您的Ingredient class 必须具有与RecipeRequirement相关联的ForeignKey才能添加与配方相关的不止一种成分。

I suggest using a website like https://drawsql.app/ in order to obtain a better visualization of your database relationships.我建议使用像https://drawsql.app/这样的网站,以便更好地可视化您的数据库关系。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM