用Django建模餐厅菜单

时间:2018-12-13 19:00:32

标签: django django-models

我正在创建一个网站,其中包含我镇餐馆的菜单集(因为它们似乎都不在grubhub或互联网上)。我在为此创建模型时遇到了麻烦。如您所知,每个餐厅菜单都有部分(即开胃菜,鸡肉,牛排)和每个部分下的条目(即开胃菜:莫扎里拉奶酪棒,玉米片等),我试图创建一个Menu模型,以便每个部分菜单中的所有条目都可以自动填充模板:

    <h1>{{section}}</h1> <!--I.e:"Appetizers"-->
    <p>{{food}} </p><!--I.e:"Mozzarella Sticks"-->
    <p>{{ food_details }}</p> 

使用上述模板,我可以使用一个循环遍历每个部分,然后使用另一个内部循环遍历属于该特定food的每个food_detailssection,但是我不确定如何正确建模:

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_detailssection条目?我希望这是有道理的,让我知道我是否可以添加任何内容,并在此先感谢您的帮助。

1 个答案:

答案 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 %}
相关问题