【发布时间】:2013-10-28 07:06:46
【问题描述】:
我有这样的模型:
class GuestStatus(models.Model):
guest_status = models.CharField(max_length=200)
arrangement = models.IntegerField(unique=True, help_text="Start from 1. Guest status will be arranged alphabetically.")
class Guest(models.Model):
user = models.ForeignKey(User)
full_name = models.CharField(max_length=250)
status = models.ManyToManyField(GuestStatus, blank=True, null=True)
invitation_date = models.DateTimeField(blank=True, null=True)
我希望 ManyToManyField 显示为复选框。这就是我这样做的原因:
class GuestForm(ModelForm):
status = forms.ModelMultipleChoiceField(queryset=GuestStatus.objects.all().order_by('arrangement'), widget=forms.CheckboxSelectMultiple, required=False)
class Meta:
model = Guest
exclude = ['user', 'invitation_date']
我正在尝试像这样保存表单:
form = GuestForm(request.POST)
if form.is_valid():
status = form.cleaned_data['status']
guest.status = status
if status:
invitation_date = datetime.now()
else:
invitation_date = None
new_guest = form.save(commit=False)
new_guest.user = request.user
new_guest.save()
new_guest.status = status
form.save_m2m()
return HttpResponseRedirect('/list_guests/')
表单正在保存所有数据,但不保存status 值。怎么了?另外,成功保存后如何访问模板中的状态值?谢谢
【问题讨论】:
-
因为你在保存
new_guest之后有new_guest.status = status -
如果我在
new_guest.user = request.user之后写new_guest.status=status然后new_guest.save()我得到这个错误:<Guest: guesteeu>" needs to have a value for field "guest" before this many-to-many relationship can be used -
如果表单有
status字段,则不需要显式设置为new_guest.status=status,只需设置form.save_m2m()即可。 -
确实。还是不行:(
标签: django django-orm