【问题标题】:django how do I know which checkbox was checkeddjango我怎么知道哪个复选框被选中
【发布时间】:2018-03-12 03:22:30
【问题描述】:

我的应用程序是一家餐馆的网站。可以点菜。我在使用此功能时遇到问题。

我不知道如何将订单存储在数据库中。

models.py:

DRINK_TYPES = (
    (1, 'soft_drinks'),
    (2, 'drinks'),
    (3, 'wines'),
    (4, 'beer'),
    (5, 'juice'),
)

WINE_COLORS = (
    (1, 'white'),
    (2, 'rose'),
    (3, 'red'),
)

WINE_SWEETNESS = (
    (1, 'dry'),
    (2, 'sweet'),
    (3, 'semi-sweet'),
    (4, 'semi-dry'),
)

DRINK_VOLUME = (
    (1, 'by the glass'),
    (2, 'bottle'),
    (3, 'decanter'),
)

class Order(models.Model):
    name_surname = models.CharField(max_length=99, verbose_name='imię nazwisko')
    address = models.CharField(max_length=199, verbose_name='adres')
    email = models.EmailField(verbose_name='email')
    phone_number = models.CharField(max_length=20, verbose_name='numer telefonu')
    self_pickup = models.BooleanField(verbose_name='odbiór własny')
    dish = models.ManyToManyField(Dish, verbose_name='danie')
    drink = models.ManyToManyField(Drinks, verbose_name='napój')
    date_added = models.DateTimeField(default=now, verbose_name='wysłane')
    dish_order_quantity = models.CharField(max_length=10, verbose_name=' danie główne ilość', default=0)
    drink_order_quantity = models.CharField(max_length=10, verbose_name='drink ilość', default=0)
    wine_order_quantity = models.CharField(max_length=10, verbose_name='wino ilość', default=0)
    juice_order_quantity = models.CharField(max_length=10, verbose_name='sok ilość', default=0)
    beer_order_quantity = models.CharField(max_length=10, verbose_name='piwo ilość', default=0)

class Dish(models.Model):
    dish_name = models.CharField(max_length=150, verbose_name='danie')
    price = models.DecimalField(max_digits=5, decimal_places=1, verbose_name='cena')
    ingredient = models.ForeignKey(Ingredient)

class Drinks(models.Model):
    drink_type = models.IntegerField(choices=DRINK_TYPES, null=True, blank=True, verbose_name='napoje typ')
    drink_volume = models.IntegerField(choices=DRINK_VOLUME, null=True, blank=True, verbose_name='objętość')
    wine_colors = models.IntegerField(choices=WINE_COLORS, null=True, blank=True, verbose_name='kolor wina')
    wine_sweetness = models.IntegerField(choices=WINE_SWEETNESS, null=True, blank=True, verbose_name='smak wina')
    drink_name = models.CharField(max_length=99, null=True, blank=True, verbose_name='napoje nazwa')
    price = models.DecimalField(max_digits=5, decimal_places=1, default=0.00, verbose_name='cena')

类 OrderView(视图):

def post(self, request):
    form = OrderForm(request.POST)
    if form.is_valid():
        new = Order.objects.create(
                                   dish_name=request.POST.get('dish_{{dish.id}}'),
                                   drink=request.POST.get('drink_{{drink.id}}'),
                                   name_surname=request.POST.get('name_surname'),
                                   address=request.POST.get('address'),
                                   email=request.POST.get('email'),
                                   phone_number=request.POST.get('phone_number'),
                                   self_pickup=request.POST.get('self_pickup')
                                   dish_order_quantity=request.POST.get('dish_order_quantity'),
                                   wine_order_quantity=request.POST.get('wine_order_quantity'),
                                   drink_order_quantity=request.POST.get('drink_order_quantity'),
                                   juice_order_quantity=request.POST.get('juice_order_quantity'),
                                   beer_order_quantity=request.POST.get('beer_order_quantity'),
                                   )
    return redirect('order')

def get(self, request):
    form = OrderForm
    dishes = Dish.objects.all()
    wines = Drinks.objects.filter(drink_type=3)
    beers = Drinks.objects.filter(drink_type=4)
    juices = Drinks.objects.filter(drink_type=5)
    soft_drinks = Drinks.objects.filter(drink_type=1)
    drinks = Drinks.objects.filter(drink_type=2)

    return render(request, 'order.html', {'dishes': dishes,
                                          'drinks': drinks,
                                          'wines': wines,
                                          'beers': beers,
                                          'juices': juices,
                                          'soft_drinks': soft_drinks,
                                          'form': form})

order.html:

<div class="extendables_bottom_margin">
    <form method="POST" id="order_form">
    {% csrf_token %}
      <div class="container">
        <div class="panel-group">
          <div class="panel panel-default">
            <div class="panel-heading">
              <h1 class="panel-title">
                <a data-toggle="collapse" href="#collapse1">Dania główne</a>
              </h1>
            </div>
            <div id="collapse1" class="panel-collapse collapse">
              <div class="panel-body">
                {% for dish in dishes %}
                {{ dish.dish_name }} ................. {{ dish.price }}
                <div class="menu_choice">
                  <input name="dish_{{dish.id}}" type="checkbox" class="inline"/>
                  <select name="dish_order_quantity" class="menu_choice_count" form="order_form">
                    <option value="--">--</option>
                    <option value="1">1</option>
                    <option value="2">2</option>
                    <option value="3">3</option>
                    <option value="4">4</option>
                    <option value="5">5</option>
                  </select>
                </div><br>
                {% endfor %}
              </div>
            </div>
          </div>
        </div>

        <div class="panel-group">
          <div class="panel panel-default">
            <div class="panel-heading">
              <h1 class="panel-title">
                <a data-toggle="collapse" href="#collapse2">Drinki</a>
              </h1>
            </div>
            <div id="collapse2" class="panel-collapse collapse">
              <div class="panel-body">
                {% for drink in drinks %}
                {{ drink.drink_name }} ................. {{ drink.price }}
                <div class="menu_choice">
                  <input name="drink_{{drink.id}}" type="checkbox" class="inline"/>
                  <select name="drink_order_quantity" class="menu_choice_count" form="order_form">
                    <option value="--">--</option>
                    <option value="1">1</option>
                    <option value="2">2</option>
                    <option value="3">3</option>
                    <option value="4">4</option>
                    <option value="5">5</option>
                  </select>
                </div><br>
                {% endfor %}
              </div>
            </div>
          </div>
        </div>

        <div class="panel-group">
          <div class="panel panel-default">
            <div class="panel-heading">
              <h1 class="panel-title">
                <a data-toggle="collapse" href="#collapse3">Wina</a>
              </h1>
            </div>
            <div id="collapse3" class="panel-collapse collapse">
              <div class="panel-body">
                {% for wine in wines %}
                {{ wine.drink_name }} / {{ wine.get_drink_volume_display }} ................. {{ wine.price }}
                <div class="menu_choice">
                  <input name="wine_{{drink.id}}" type="checkbox" class="inline"/>
                  <select name="wine_order_quantity" class="menu_choice_count" form="order_form">
                   <option value="--">--</option>
                    <option value="1">1</option>
                    <option value="2">2</option>
                    <option value="3">3</option>
                    <option value="4">4</option>
                    <option value="5">5</option>
                  </select>
                </div><br>
                {% endfor %}
              </div>
            </div>
          </div>
        </div>

        <div class="panel-group">
          <div class="panel panel-default">
            <div class="panel-heading">
              <h1 class="panel-title">
                <a data-toggle="collapse" href="#collapse4">Soki</a>
              </h1>
            </div>
            <div id="collapse4" class="panel-collapse collapse">
              <div class="panel-body">
                {% for juice in juices %}
                {{ juice.drink_name }} ................. {{ juice.price }}
                <div class="menu_choice">
                  <input name="juice_{{drink.id}}" type="checkbox" class="inline"/>
                  <select name="juice_order_quantity" class="menu_choice_count" form="order_form">
                    <<option value="--">--</option>
                    <option value="1">1</option>
                    <option value="2">2</option>
                    <option value="3">3</option>
                    <option value="4">4</option>
                    <option value="5">5</option>
                  </select>
                </div><br>
                {% endfor %}
              </div>
            </div>
          </div>
        </div>

        <div class="panel-group">
          <div class="panel panel-default">
            <div class="panel-heading">
              <h1 class="panel-title">
                <a data-toggle="collapse" href="#collapse5">Piwa</a>
              </h1>
            </div>
            <div id="collapse5" class="panel-collapse collapse">
              <div class="panel-body">
                {% for beer in beers %}
                {{ beer.drink_name }} ................. {{ beer.price }}
                <div class="menu_choice">
                  <input name="beer_{{drink.id}}" type="checkbox" class="inline"/>
                  <select name="beer_order_quantity" class="menu_choice_count" form="order_form">
                    <option value="--">--</option>
                    <option value="1">1</option>
                    <option value="2">2</option>
                    <option value="3">3</option>
                    <option value="4">4</option>
                    <option value="5">5</option>
                  </select>
                </div><br>
                {% endfor %}
              </div>
            </div>
          </div>
        </div>
      </div>


    <div class="cd">
        {{ form.as_p }}
        <input type="submit" value="wyślij">
    </form>
  </div>

在我的 .html 中,我有一个循环打印单个菜肴/饮料。每个循环都有一个单选按钮和一个带有订购数量的下拉菜单。

1.当有人点了超过 1 道主菜或饮料时,我如何在 DB 中保存? 我想我需要改变我的模型,但不确定如何。

2. 一般情况下,即使我点了 1 道菜和饮料,我也无法保存在数据库中,而且我无法找出错误。

感谢大家的意见。

谢谢。

【问题讨论】:

  • 您可以在问题中添加整个表单吗?

标签: python sql django


【解决方案1】:

django 可以使用request.GET.get('input_name') 读取表单数据,这将返回输入值, 如果复选框被选中,则值为True

如果您想从选择输入中获取数据,请执行以下操作:

html代码

<select name = "myselect" class="menu_choice_count">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
</select>

django 视图

choice = request.GET.get('myselect')
mymodel.objects.create(choice=choice...)

【讨论】:

  • 是的,我要补充一点,你必须使用 beer.id 作为值,而不是你所拥有的
  • 如何获取复选框值?选择 = request.POST.get('beer_{{beer.id}}') ?究竟应该将哪些值更改为 beer.id?我真的在黑暗中。
  • 代码中的错误语法 name=beer_{{beer.id}} 它应该是 name="beer_{{beer.id}}"我>
  • 嗨,一定还有什么遗漏的。我没有看到这些数据被提取。我有一个打印键的“打印”语句,我看到的唯一键是客户详细信息:姓名、电子邮件等。我还要提供什么?谢谢
  • 你不能用你的代码做到这一点,你知道我会为你做这个项目,然后给你 GitHub 的链接,因为我想帮你联系我 -mohammedalqudah@hotmail.com- :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-06
  • 2011-10-27
  • 1970-01-01
相关资源
最近更新 更多