Я занимаюсь разработкой сайта, где пользователи могут регистрировать любимые продукты на этом сайте. Итак, я хотел бы создать форму флажка, разделенную внешним ключом, как это.
Фрукты
□ яблоко
☑︎ оранжевый
☑︎ Лимон
Растительное
□ помидор
☑︎ баклажаны
☑︎ огурец
Таблица
● FoodsType
id | Имя
1, фрукты
2, Овощной
● Продукты питания
id | имя | type_id
1, яблоко, 1
2, оранжевый, 1
3, Лимон, 1
4, помидор, 2
5, баклажан, 2
6, огурец, 2
● UserFoods
id | food_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 %}
текущий результат
□ яблоко
☑︎ оранжевый
☑︎ Лимон
□ помидор
☑︎ баклажаны
☑︎ огурец