Django UpdateView CheckboxSelectMultiple-如何在CheckboxSelectMultiple中加载对象的ManyToMany字段?
My UpdateView从模型表单中绘制,其中sport_prefs字段作为复选框SelectMultiple加载。表单正确加载并成功将数据提交到MemberRecord模型 我的问题在UpdateView中,即使sport_prefs字段显示为复选框,它也不会加载当前对象sport_prefs字段的数据。复选框加载为空,虽然我可以选择选项,它将正确更新和保存,但我无法加载首次创建或上次更新时的sport_prefs数据 models.pyDjango UpdateView CheckboxSelectMultiple-如何在CheckboxSelectMultiple中加载对象的ManyToMany字段?,django,Django,My UpdateView从模型表单中绘制,其中sport_prefs字段作为复选框SelectMultiple加载。表单正确加载并成功将数据提交到MemberRecord模型 我的问题在UpdateView中,即使sport_prefs字段显示为复选框,它也不会加载当前对象sport_prefs字段的数据。复选框加载为空,虽然我可以选择选项,它将正确更新和保存,但我无法加载首次创建或上次更新时的sport_prefs数据 models.py class SportOptions(models.
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'
]
我的猜测是,我创建了一个新的复选框SelectMultiple字段,并加载了正确的选项,因为我从SportOptions模型中绘制,而不是从特定对象的sport_prefs中绘制。当我将ModelForm“sport\u preference”更改回“sport\u prefs”时,这显示为真,因为它正确加载了数据,但没有作为复选框SelectMultiple加载。我猜如果我想将数据作为复选框加载,我需要通过sport_preference中的查询集过滤器传递对象id?如果是这样,我该怎么做?该字段的名称是sport\u prefs,因此您应该使用该字段名称。如果要使用其他标签,可以指定:
字段名为sport_prefs,因此您应该使用该字段名。如果要使用其他标签,可以指定:
该字段的名称是sport_prefs,因此您应该使用该字段名称。@WillemVanOnsem谢谢您的回答!如何将字段显示为复选框SelectMultiple?EDIT-NVM我在另一篇帖子上看到了您的回复,谢谢!!该字段的名称是sport_prefs,因此您应该使用该字段名称。@WillemVanOnsem谢谢您的回答!如何将字段显示为复选框SelectMultiple?EDIT-NVM我在另一篇帖子上看到了您的回复,谢谢!!谢谢如何将sport_prefs字段显示为复选框SelectMultiple?因为默认的ManyToMany字段显示为multi-select,我更喜欢复选框@jonayoung:您保留了widget=forms.CheckboxSelectMultiple?@jonayoung:问题不在于widget,而在于您字段的名称没有映射到模型字段的名称上。很抱歉,我重新阅读了您的回答。我改变了你的解释,它起作用了。非常感谢你,威廉!!谢谢如何将sport_prefs字段显示为复选框SelectMultiple?因为默认的ManyToMany字段显示为multi-select,我更喜欢复选框@jonayoung:您保留了widget=forms.CheckboxSelectMultiple?@jonayoung:问题不在于widget,而在于您字段的名称没有映射到模型字段的名称上。很抱歉,我重新阅读了您的回答。我改变了你的解释,它起作用了。非常感谢你,威廉!!
class createForm(ModelForm):
sport_prefs = forms.ModelMultipleChoiceField(
label='Sport preferences',
queryset=SportOptions.objects.all(),
widget=forms.CheckboxSelectMultiple()
)
class Meta:
model = MemberRecord
fields = [
'name',
'age',
'join_date',
'sport_prefs',
'notes'
]