Mik*_*lad 0 django django-models django-forms
我有一个多对多字段,结果CheckboxSelectMultiple没有保存在数据库中,我不明白为什么。这一定很简单,但是......
这是代码:
模型.py
class Person(models.Model):
last_name = models.CharField(max_length = 50)
first_name = models.CharField(max_length = 50)
def __str__(self):
return self.last_name +" "+self.first_name
class Event(models.Model):
owner = models.ForeignKey(User, on_delete=models.SET_NULL, null = True)
person = models.ManyToManyField(Person)
Run Code Online (Sandbox Code Playgroud)
表格.py
class EventForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
self.user = kwargs.get('user',None)
#self.user = kwargs.pop('user',None)
super(EventForm, self).__init__(*args, **kwargs)
self.helper = FormHelper()
self.helper.form_method = 'POST'
#self.helper.form_action = reverse_lazy('simpleuser')
self.helper.add_input(Submit('submit', 'Submit', css_class='btn-success'))
class Meta:
model = Event
fields = ['person']
widgets ={
'person': forms.CheckboxSelectMultiple,
}
Run Code Online (Sandbox Code Playgroud)
视图.py
def uploadevent(request):
if request.method == "POST":
form =EventForm(request.POST)
if form.is_valid():
event = form.save(commit=False)
event.owner = request.user
event.save()
else:
form = EventForm()
return render...
Run Code Online (Sandbox Code Playgroud)
请参阅此 stackoverflow 问题的回复:通过 Django 中的模型表单保存多对多数据
引用 OP:
使用 commit=False 时,必须调用 save_m2m()
m2m 关系需要先保存父对象,而使用 commit=False 而不是这样做
只需在下面添加这一行 event.save()
if form.is_valid():
event = form.save(commit=False)
event.owner = request.user
event.save()
form.save_m2m()
Run Code Online (Sandbox Code Playgroud)
参考:https : //docs.djangoproject.com/en/2.0/topics/forms/modelforms/#the-save-method
| 归档时间: |
|
| 查看次数: |
1404 次 |
| 最近记录: |