FORMSET我有以下型号:主题,用户配置,UserSubscribedToTopic填充一个Django使用左连接
最后,这些看起来是这样的:
class UserSubscribedToTopic(models.Model):
topic = models.ForeignKey(Topic)
user_profile = models.ForeignKey(UserProfile)
start_date = models.DateField(null=True, blank=True)
我想展示主题的一个列表用户,每个都有一个复选框。如果用户选中一个复选框,那么我将使用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并使用我手动填充的formset会更好吗?
- 有没有更好的方法?