に参加し、左を使用してフォームセットユーザーごとにチェックボックスが表示されます。ユーザーがチェックボックスをチェックすると、JavaScriptを使用して「開始日」テキストフィールドが表示されます(この質問の目的のために、チェックボックスの隣にテキストフィールドを表示するだけです)。ユーザーが既に選択内容を保存していて、ページを再訪している場合は、フォームが最初にレンダリングされたときにそれに応じてフォームを作成したいと考えています。は、私は次のモデルを持っている
私はこの使用してフォームセットを行うことを試みてきました:
class SubscribeToTopicForm(ModelForm):
class Meta:
model = UserSubscribedToTopic
fields = ('topic','start_date')
widgets = {'topic': CheckboxInput(attrs={'class': 'topic-checkbox'}),
'start_date': TextInput(attrs={'class': 'date','placeholder': 'Start date'})}
SubscribeToTopicFormSetBase = modelformset_factory(
UserSubscribedToTopic,
form=SubscribeToTopicForm,
extra = 0)
class SubscribeToTopicFormSet(SubscribeToTopicFormSetBase):
def add_fields(self, form, index):
super(SubscribeToTopicFormSet, self).add_fields(form, index)
私は私の見解に以下を追加した場合、私はほとんど私が欲しいものを得る:
しかし、明らかにこれはのみ表示されますユーザーがすでに購読しているトピック本当に必要なトピックをすべて表示するには、トピックテーブルのLEFT JOINが必要です。私は生長に頼らずにDjangoでこれを行う方法を見ることができません。
私の質問:
- は左から生成される フォームセットは、参加のために、私は右のそれを考えでクエリセットを指定することはできませんでしょうか?
- ModelFormをあきらめて、手動で入力するフォームセットを使用する方が良いでしょうか?
- これ以上のアプローチはありますか?