我正在开发食品网站,用户可以在此网站上注册喜欢的食品。因此,我想创建一个用外键分隔的复选框形式。
水果
□苹果
☑︎橙色
☑︎柠檬
蔬菜
□番茄
☑︎茄子
☑︎黄瓜
表
●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 %}
当前结果
□苹果
☑︎橙色
☑︎柠檬
□番茄
☑︎茄子
☑︎黄瓜
答案 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);
}
}