繁体   English   中英

Django的ManyToMany表单保存

[英]ManyToMany Form saving in django

如果用户提交表单,我试图将ManyToMany字段保存到我的数据库中。 当用户提交表单时,我可以在数据库中看到非M2M字段,但是即使选择了M2M字段也不会显示。 我一直在搜索很多东西,并且看到了有关m2m_save()函数的一些信息,但无法弄清楚。 任何帮助是极大的赞赏! (我已经搜索了很长时间,所以希望我不再重复这个问题!)

# models.py

class Contact(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)
    contactinfo = models.ForeignKey(ContactInfo)
    location = models.ForeignKey(Location, null=True, blank=True)
    work = models.ManyToManyField(Work, null=True, blank=True)
    skills = models.ManyToManyField(Skills, null=True, blank=True)
    contactgroup = models.ManyToManyField(ContactGroup, null=True, blank=True)
    timestamp = models.DateTimeField(auto_now_add=True)


    def __unicode__(self):
        return u'%s %s' % (self.first_name, self.last_name)


    class Meta:
        ordering = ["first_name",]



#forms.py

class ContactForm(forms.ModelForm):
    class Meta:
        model = Contact
        #exclude = ('work', 'skills', 'contactgroup')
        first_name = forms.TextInput(),
        last_name = forms.TextInput(),
        contactinfo = forms.ModelChoiceField(queryset=ContactInfo.objects.all()),
        location = forms.ModelChoiceField(queryset=Location.objects.all()),
        work = forms.ModelMultipleChoiceField(queryset=Work.objects.all()),
        skills = forms.ModelMultipleChoiceField(queryset=Skills.objects.all()),
        contactgroup = forms.ModelMultipleChoiceField(queryset=ContactGroup.objects.all()),
        widgets = {
            'first_name': forms.TextInput(attrs={'placeholder': 'First'}),
            'last_name': forms.TextInput(attrs={'placeholder': 'Last'}),
        }


# views.py 
def apphome(request):
    if not request.user.is_authenticated():
        return HttpResponseRedirect('/')
    form1 = ContactForm(request.POST or None)
    if form1.is_valid():
        new_contact = form1.save(commit=False)
        new_contact.save()
        new_contact.save_m2m()
        return HttpResponseRedirect("/app")

    return render_to_response("apphome.html", locals(), context_instance=RequestContext(request))    

运行此命令时,我收到以下消息:

AttributeError at /app/
'Contact' object has no attribute 'save_m2m'

save_m2m是窗体上的方法,而不是new_contact (这是模型的实例)上的方法。

但是,如果您错过了表单保存的commit=False ,则根本不需要调用它。 拥有save_m2m的唯一原因是当您使用commit=False ,如果要在正确保存之前设置任何实例字段, save_m2m要这样做。 如果你不想这样做,因为在这里,只是做form1.save()直接,那么就没有需要调用new_contact.save()save_m2m()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM