2010-02-07 61 views
0

节省我有一个的ModelForm:Many2ManyField不是通过Modelforms

class POwner4NewModel(ModelForm): 
    class Meta: 
     model = ProductOwner 
     exclude = ("o_owner","o_owner_desc","o_product_model","o_main_image","o_thumbnail","o_gallery_images","o_timestamp","o_status") 

这是模型的模式:

class ProductOwner(models.Model): 
    o_owner = models.ForeignKey(User, verbose_name="Owner") 
    o_owner_desc = models.TextField(verbose_name="Seller Description") 
    o_product_model = models.ForeignKey(ProductModel, verbose_name="Product") 
    o_main_image = models.ImageField(upload_to=settings.CUSTOM_UPLOAD_DIR, verbose_name="Product Main Image", blank=True) 
    o_thumbnail = models.ImageField(upload_to=settings.CUSTOM_UPLOAD_DIR, verbose_name="Product Thumbnail (100x100)px", blank=True) 
    o_gallery_images = models.ManyToManyField(ProductImages, verbose_name="Product Gallery Images", related_name="product_images", blank=True)  
    o_status = models.CharField(max_length=100, choices=PRODUCT_STATUS, verbose_name="Product Status", default="approved") 
    o_timestamp = models.DateTimeField(auto_now_add=True, verbose_name="Date Created") 
    o_internationlisation = models.ManyToManyField(Countries, verbose_name="Available in", related_name="product_countries") 

这是我的代码试图保存表单:

def save_m_owner(self, request): 
    form = POwner4NewModel(request.POST, request.FILES) 
    form = form.save(commit=False) 
    form.o_owner = request.user 
    form.o_owner_desc = self.product_model.p_description 
    form.o_product_model = self.product_model 
    form.o_status = "unapproved" 
    form.o_main_image = self.product_model.p_main_image 
    form.save() 

我试过添加form.save_m2m(),但它表示窗体没有该属性。所以现在,在使用o_internationlisation的字段中,m2m不会被保存。我不确定我在这里做错了什么,可以使用一些帮助,谢谢!

+0

你在哪里试图调用'save_m2m()'?它必须在'save()'方法之后。顺便说一句,在第一个代码示例中,最后一行(拼写错误?)的末尾有'v'。 – 2010-02-07 21:43:29

+0

save()后,我打电话给它,是错字,感谢您发现;) – nubela 2010-02-07 22:15:42

回答

4

形式没有save_m2m()因为你,当你用别的东西像instance = form.save(commit=False)等等,那么你应该能够(在instance.save()后的课程)使用form.save_m2m()form = form.save(commit=False)

尝试模型实例改写form

+0

真棒,谢谢! – nubela 2010-02-08 06:19:43