【发布时间】:2020-11-04 09:39:29
【问题描述】:
我的 UpdateView 来自一个 ModelForm,其中 sport_prefs 字段作为 CheckboxSelectMultiple 加载。表单正确加载并成功向 MemberRecord 模型提交数据。
我的问题出在 UpdateView 中,尽管 sport_prefs 字段显示为复选框,但它不会加载当前对象 sport_prefs 字段的数据。复选框加载为空白,虽然我可以选择选项并且它将正确更新和保存,但我无法加载第一次创建或上次更新时的 sport_prefs 数据。
models.py
class SportOptions(models.Model):
sport_name = models.CharField(max_length=200)
class MemberRecord(models.Model):
name = models.ForeignKey(ContactInfo, on_delete=models.PROTECT)
age = models.IntegerField()
join_date = models.DateField(default=timezone.now)
sport_prefs = models.ManyToManyField(SportOptions)
notes = models.TextField(blank=True)
author = models.ForeignKey(User, on_delete=models.PROTECT)
forms.py
class createForm(ModelForm):
sport_preference = forms.ModelMultipleChoiceField(
queryset=SportOptions.objects.filter(),
widget=forms.CheckboxSelectMultiple
)
class Meta:
model = MemberRecord
fields = [
'name',
'age',
'join_date',
'sport_preference',
'notes'
]
我的猜测是我创建了一个新的 CheckboxSelectMultiple 字段并加载了正确的选项,因为我从 SportOptions 模型中绘制,但我没有从特定对象的 sport_prefs 中绘制。当我将 ModelForm 'sport_preference' 更改回 'sport_prefs' 时,这显示正确,因为它正确加载了数据,但它没有作为 CheckBoxSelectMultiple 加载。如果我想将数据加载为复选框,我猜我需要通过 sport_preference 中的查询集过滤器传递对象 ID?如果是这样,我该怎么做?
【问题讨论】:
-
字段名是
sport_prefs,所以你应该使用那个字段名。 -
@WillemVanOnsem 感谢您的回答!我如何将该字段显示为 CheckBoxSelectMultiple?EDIT-NVM 我在另一篇文章中看到了您的回复,谢谢!!
标签: django