ユーザーごとに好きな食べ物を登録できるサイトを作っております。フォーム入力の際に、外部キーでグルーピングしたチェックボックスを表示させたいと考えております。
こんなイメージです。
Fruits
□ Apple
☑︎ Orange
☑︎ Lemon
Vegetable
□ Tomato
☑︎ Eggplant
☑︎ Cucumber
テーブル構造
● FoodsType
id | name
1, Fruits
2, Vegetable
● Foods
id | name | type_id
1, Apple, 1
2, Orange, 1
3, Lemon, 1
4, Tomato, 2
5, Eggplant, 2
6, Cucumber, 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 %}
現在の結果は外部キーでのグルーピングができておりません。何卒よろしくお願いいたします。
□ Apple
☑︎ Orange
☑︎ Lemon
□ Tomato
☑︎ Eggplant
☑︎ Cucumber
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/04/26 06:26