我正在创建一个网站,其中包含我镇餐馆的菜单集(因为它们似乎都不在grubhub或互联网上)。我在为此创建模型时遇到了麻烦。如您所知,每个餐厅菜单都有部分(即开胃菜,鸡肉,牛排)和每个部分下的条目(即开胃菜:莫扎里拉奶酪棒,玉米片等),我试图创建一个Menu
模型,以便每个部分菜单中的所有条目都可以自动填充模板:
<h1>{{section}}</h1> <!--I.e:"Appetizers"-->
<p>{{food}} </p><!--I.e:"Mozzarella Sticks"-->
<p>{{ food_details }}</p>
使用上述模板,我可以使用一个循环遍历每个部分,然后使用另一个内部循环遍历属于该特定food
的每个food_details
和section
,但是我不确定如何正确建模:
from django.db import models
class Restaurant(models.Model):
name = models.CharField(max_length=50)
address = models.CharField(max_length=80)
phoneNumber = models.CharField(max_length=10)
def __str__(self):
return "%s the place" % self.name
class Menu(models.Model):
restaurant = models.OneToOneField(
Restaurant,
on_delete=models.CASCADE,
primary_key=True,
)
# not sure how to build menu fields
#if I do the following each menu will only have one of these fields, which will not work:
section = models.CharField(max_length=50)
food = models.CharField(max_length=50)
food_details = models.CharField(max_length=200)
如何创建一个菜单模型,该菜单在每个section
下具有多个food
以及多个food_details
和section
条目?我希望这是有道理的,让我知道我是否可以添加任何内容,并在此先感谢您的帮助。
答案 0 :(得分:1)
您可以尝试这样的事情:
# models.py
FOOD_TYPES = (
('appetizer', 'appetizer'),
('entree', 'entree'),
('dessert', 'dessert'),
)
class FoodItem(models.Model):
name = models.CharField(max_length=30)
description = models.CharField(max_length=100)
type = models.CharField(max_length=100, choices=FOOD_TYPES)
class Menu(models.Model):
restaurant = models.OneToOneField(
Restaurant,
on_delete=models.CASCADE,
primary_key=True,
)
food_items = models.ManyToManyField(FoodItem)
在视图中:
# views.py
class Restaurant(TemplateView):
model = Restaurant
template_name = 'name'
...
def get_context_data
context = super(Menu, self).get_context_data(**kwargs)
restaurant = Restaurant.objects.get(name='McDonalds')
context['restaurant'] = Restaurant.objects.get(name='McDonalds')
context['menu'] = Menu.objects.get(restaurant=restaurant)
return context
在模板中:
# template.html
<h1>{{ restaurant.name }}</h1>
<h2>Menu</h2>
{% for item in menu.food_items %}
{% if item.type = 'appetizer' %}
<p>
{{ item.name }}
{{ item.description }}
{{ item.type }}
</p>
{% else %}
<p>No appetizers</p>
{% endif %}
{% if item.type = 'entree' %}
<p>
{{ item.name }}
{{ item.description }}
{{ item.type }}
</p>
{% else %}
<p>No entrees</p>
{% endif %}
{% if item.type = 'dessert' %}
<p>
{{ item.name }}
{{ item.description }}
{{ item.type }}
</p>
{% else %}
<p>No dessert</p>
{% endif %}
{% endfor %}