2015-01-16 43 views
0

我想從2個django表單發佈數據,但無法將數據保存到我的數據庫。 這是爲什麼?在我按下提交按鈕之後,我在價格輸入框下面看到消息「它是必需的」。當我用django表單提交時出現錯誤

我的觀點

def addproduct(request): 

    user = request.user 
    product_form = ProductForm(request.POST or None) 
    product_image_form = ProductImageForm(request.POST or None) 

    if product_form.is_valid() and product_image_form.is_valid(): 
     product = product_form.save(commit=False) 
     product.user = request.user 
     product.slug = slugify(product_form.cleaned_data['title']) 
     product.featured = False 
     product.active = False 
     product.save() 
     product_image = product_image_form.save(commit=False) 
     product_image.featured = False 
     product_image.save() 
     return HttpResponseRedirect('/products/%s'%(product.slug)) 

我的模型

class Product(models.Model): 
    user = models.ForeignKey(settings.AUTH_USER_MODEL, blank=True, null=True) 
    title = models.CharField(max_length=120) 
    description = models.TextField(null=True, blank=True) 
    price = models.DecimalField(decimal_places=0, max_digits=100, default=0) 
    slug = models.SlugField(unique=True) 

class ProductImage(models.Model): 
    product = models.ForeignKey(Product) 
    image = models.ImageField(upload_to='products/images/') 
    featured = models.BooleanField(default=False) 

我的形式

from django import forms 
from .models import Product, ProductImage 

class ProductForm(forms.ModelForm): 
    class Meta: 
     model = Product 
     fields = ('title', 'description', 'price') 

class ProductImageForm(forms.ModelForm): 
    class Meta: 
     model = ProductImage 
     fields = ('image', 'featured') 
+0

您需要提供您的模板代碼。除非你明確聲明'blank = True',否則所有Django表單域都是必需的*默認* – Brandon

回答

1

你得到 「這個字段是必須的」 錯誤不低於價格輸入框,但影像選擇器的上方。你忘了request.FILES參數傳遞給ProductImageForm

product_image_form = ProductImageForm(request.POST or None, 
             request.FILES or None) 

而且不要忘了在<form>標記指定enctype屬性:

<form method="post" enctype="multipart/form-data"> 
+0

謝謝catavaran!但是這次我有另一個錯誤「列塞不是唯一的」。我檢查slug字段,我看到sogred slug數據,但它是唯一的。我誤解了什麼嗎? –

+0

您的產品在數據庫中具有相同的slug。你應該在保存'product'之前檢查它,並且改變slug爲唯一的。 'django-autoslug'模塊可以幫助你。 – catavaran

+0

哦,太棒了!無盡的錯誤來臨。這次「myproducts_productimage.product_id可能不是NULL」。爲什麼? –