所有模型实例的单独表单

时间:2020-07-06 10:02:33

标签: django django-forms django-views django-templates

我想从POST获取下一个数据:

[{'id': 1, 'number_of_product': 3, 'is_checked': on}, {'id': 2, 'number_of_product': 1, 'is_checked': off}]

现在我有这个了:

'dishes': ['2', '2', '3', '4', '3', '2'], 'number_of_dish': ['2', '3', '1', '1', '1', '1'], 'checkbox': ['on', 'on']

class Dish(models.Model):
    """Dish model"""
    name = models.CharField(max_length=50, blank=False, null=False)
    category = models.ForeignKey(
        Category,
        on_delete=models.CASCADE
    )
    price = models.DecimalField(max_digits=6, decimal_places=2, null=False)
    image = models.ImageField(upload_to='dishes/', blank=True, null=True)
    created_at = models.DateField(auto_now_add=True)
    updated_at = models.DateField(auto_now=True)

class OrderForm(forms.ModelForm):
    """Order creating form"""
    checkbox = forms.BooleanField(required=False)
    dishes = forms.ModelMultipleChoiceField(queryset=Dish.objects.all())
    number_of_dish = forms.IntegerField(
        initial=1, min_value=1, label="Number: "
    )

    class Meta:
        model = Order
        fields = ('date', 'dishes', 'number_of_dish')
        widgets = {
            'date': DateInput(
                attrs={
                    'class': 'form-control'
                })
        }

class HomeView(LoginRequiredMixin, CreateView):
    """Home view with order creating form"""
    template_name = 'pages/home.html'
    form_class = OrderForm
    success_url = reverse_lazy('pages:home')


    def post(self, request):
        # TODO: [{'id': 1, 'number_of_product': 3, 'is_checked': on}, {'id': 2, 'number_of_product': 1, 'is_checked': off}]
        print(request.POST)
        return HttpResponseRedirect(self.success_url)

我的模板页面:


    <form action="" method="post">
        {% csrf_token %}
        {% for dish in form.dishes %} 

            {{ dish }}
            {{ form.number_of_dish | as_crispy_field }}
            {{ form.checkbox }}

        {% endfor %}
        <button type="submit" class="btn btn-primary">Order</button>
    </form>

0 个答案:

没有答案