私は、ユーザープロファイル(ユーザーは複数の選択肢を関連付けることができます)に関連付けたい、ModelChoiceFieldという1つのフィールドのみを含むモデルをアプリケーションに持っています。これらの選択肢は実行中は変更されません。最終的にはそれらを使用してユーザーを選択してフィルタリングします。 2つのモデルの外観は次のとおりです。ModelChoiceFieldでモデルをインスタンス化する
...
class Choice(models.Model):
Choice1 = 0
Choice2 = 1
Choice3 = 2
Choices_Available = (
(Choice1, 'Choice1'),
(Choice2, 'Choice2'),
(Choice3, 'Choice3'),
)
choice = models.IntegerField(choices=Choices_Available, null=True)
def __iter__(self):
return iter(self.Choices_Available)
def __str__(self):
return self.Choices_Available[self.choice]
class Profile(models.Model):
choice = models.ManyToManyField(Choice)
私が抱えている問題は、実際に選択肢を選択し、その選択肢をユーザーに関連付けることです。
...
class EditProfile(forms.ModelForm):
choice = forms.MultipleChoiceField(choices=Choice.objects.all(), widget=CheckboxSelectMultiple)
class Meta:
model = Profile
fields = ['choice']
特定のセットアップには現在の選択オブジェクトが存在しないので、何も現れないことを意味し:実際に選択をするだろうユーザーフォームでは、ほとんどの例では、私を濾過可能な選択肢のオブジェクトと、なMultipleChoiceFieldを見てきました。
私は、利用可能な選択肢ごとに選択肢オブジェクトを作成することでそれを修正すると思います。ユーザーがフォームのあるページを要求すると、使用可能な選択肢が表示されます。結局、すべてのユーザーは多くの選択肢オブジェクト(この例では3)に関連付けることができ、使用されるスペースを最小限に抑えるだけの多くのオブジェクトがデータベースに格納されます。
これを行うには、私はChoiceオブジェクトを作成する必要があります。私の質問には、次のことがあります。選択肢を選択してChoiceオブジェクトを作成するにはどうすればいいですか(現在デフォルトののinitメソッドしかありません)。また、これは合理的な方法ですか? ありがとう