Django-如何创建用外键分隔的复选框形式

时间:2019-04-25 11:27:47

标签: django

我正在开发食品网站,用户可以在此网站上注册喜欢的食品。因此,我想创建一个用外键分隔的复选框形式。

水果
□苹果
☑︎橙色
☑︎柠檬

蔬菜
□番茄
☑︎茄子
☑︎黄瓜



●FoodsType
id |名称
1,水果
2,蔬菜

●食品
id |名称| type_id
1,苹果,1
2,橙色,1
3,柠檬1
4,番茄,2
5,茄子2
6,黄瓜2

●UserFoods
id | foods_id | user_id
1,2,1
2、3、1
3,5,1
4、6、1
5、2、2
6,3,2
7、5、2
8、2、3

这是我的代码:

■️models.py

class FoodsType(models.Model):
    name = models.CharField(max_length=255)

    def __str__(self):
        return self.name

class Foods(models.Model):
    name = models.CharField(max_length=255)
    type = models.ForeignKey(FoodsType, on_delete=models.CASCADE)

    def __str__(self):
        return self.name

class UserFoods(models.Model):
    foods = models.ManyToManyField(Foods)
    user = models.ForeignKey(UserProfile, on_delete=models.CASCADE)

■️form.py

class FoodsFrom(forms.ModelForm):
    foods = forms.ModelMultipleChoiceField(label='favorite foods', queryset=Foods.objects.all(), widget=forms.CheckboxSelectMultiple)

    class Meta:
        model = Foods
        fields = ('name', 'type')

■️view.py

class registerForm(generic.CreateView):

    def get(self, request):
        food_form = FoodsFrom()
        context = {
            'food_form': food_form
        }
        return render(request, 'register.html', context)

■️register.html

{% for field in food_form %}
    <tr>
        <th><label for="{{ field.id_for_label }}">{{ field.label }}</label></th>
        <td>{{ field }} {{ field.errors }}</td>
    </tr>
{% endfor %}

当前结果
□苹果
☑︎橙色
☑︎柠檬
□番茄
☑︎茄子
☑︎黄瓜

1 个答案:

答案 0 :(得分:0)

您可以尝试使用内置模板重组:https://docs.djangoproject.com/fr/2.2/ref/templates/builtins/#regroup

举例来说,它应该是这样的:

$counter = 0;
foreach ($largegroups as $key => $users) { // loops 4 times
    for ($i = 1; $i <= 4; $i++) {
        $counter++;
        $groupname = sprintf("Group %02d", $counter);
    }
}