通过Django中的modelform保存多个数据 [英] Saving Many To Many data via a modelform in Django
问题描述
我从一个表单中保存了很多到多个字段的问题。以下是我的模型:
I have a problem saving many to many fields from a form. Here are my models:
class TextIssue(models.Model):
Issue = models.CharField(max_length=150, unique=True)
def __unicode__(self):
return self.Issue
class PadIssue(models.Model):
Issue = models.CharField(max_length=150, unique=True)
def __unicode__(self):
return self.Issue
class PHIssue(models.Model):
Data = models.ForeignKey(Data)
TextIssue = models.ManyToManyField(TextIssue, blank=True, null=True)
PadIssue = models.ManyToManyField(PadIssue, blank=True, null=True)
Notes = models.TextField()
def clean(self):
from django.core.exceptions import ValidationError
if self.TextIssue is None and self.PadIssue is None:
raise ValidationError('You must choose at least one issue category.')
if self.Notes is None:
raise ValidationError('You must write a note regarding the issues selected above.')
class PHIssueForm(ModelForm):
class Meta:
model = PHIssue
exclude = ('Data',)
这里我在我的视图中处理帖子请求.py:
And here I process the post request in my views.py:
def process_npiform(request, npi_id=None):
if npi_id:
try:
npi = Data.objects.get(id=int(npi_id))
except:
raise Http404
if request.method == 'POST':
data = DataForm(request.POST, instance=npi, prefix='npi_data')
if data.is_valid():
update = data.save(commit=False)
if not request.user.is_superuser:
update.User = request.user
update.save()
if update.Status == 'past-due':
try:
prefab = PHIssue.objects.get(Data=npi)
except:
prefab = PHIssue(Data=Data.objects.get(id=int(update.id)))
prefab.save()
issue = PHIssueForm(request.POST, instance=prefab, prefix='npi_issue')
if issue.is_valid():
save_issue = issue.save(commit=False)
save_issue.save()
return HttpResponseRedirect(reverse('pm'))
else:
return render_to_response('npi/data.html', {'data': data, 'issue': issue}, context_instance=RequestContext(request))
else:
return HttpResponseRedirect(reverse('pm'))
每当我通过表单保存时,只有Notes文本字段保存在PHIssue实例中,并且许多到多个字段留空。有人可以帮我找到什么问题吗?
Whenever I save through the form, only the Notes text field gets saved in the PHIssue instance, and the many to many fields are left blank. Can someone help me find what is wrong?
推荐答案
http://docs.djangoproject.com/en/dev/topics/forms/modelforms/#the-save-method
使用 commit = False
时,您必须调用 save_m2m() / code>
When using commit=False
, you have to call save_m2m()
m2m关系需要先保存父对象,而不是使用 commit = False
m2m relationships require the parent object to be saved first, which you are not doing by using commit=False
这篇关于通过Django中的modelform保存多个数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!