我的应用有问题。 宠物店应用程序。
我创建了2个表单。 First表单允许用户创建自己的商店并将数据保存到我成功完成的模型中,第二个表单允许用户将自己的宠物添加到宠物商店。
第一个表单是成功的,因为它已经正确验证但我的第二个表单没有成功验证,因为在PetForm中,我有一个名为image = forms.FileField()的字段,用户可以上传他们的宠物的图片和验证失败,因为图片无法保存。
我试图在image = forms.FileField(upload_to =“images /”)中加入一个参数 但是我收到了一个错误
__init__() got an unexpected keyword argument 'upload_to'
我正在阅读文档,并说明“当我在表单中使用FileField时,您还必须记住将文件数据绑定到表单。”。
我无法理解文件数据的绑定。
有人可以帮助我!
我的forms.py
from django import forms
from pet.models import Store
from pet.models import Pet
class StoreForm(forms.ModelForm):
name = forms.CharField(max_length =20,widget =forms.Textarea)
number = forms.CharField(max_length =20,widget =forms.Textarea)
address = forms.CharField(max_length = 20,widget = forms.Textarea)
class Meta:
model = Store
fields = ('name','number','address')
class PetForm(forms.ModelForm):
animal =forms.CharField(max_length = 20,widget = forms.Textarea)
description =forms.CharField(max_length =20, widget = forms.Textarea)
owner = forms.ModelChoiceField(queryset=Store.objects.all())
image = forms.FileField()
class Meta:
model = Pet
fields = ('animal','description','owner','image')
我的models.py
from django.db import models
class Store(models.Model):
name = models.CharField(max_length = 20)
number = models.BigIntegerField()
address =models.CharField(max_length = 20)
def __unicode__(self):
return self.name
class Pet(models.Model):
animal = models.CharField(max_length =20)
description = models.TextField()
owner = models.ForeignKey(Store)
image = models.FileField(upload_to="images/",blank=True,null=True)
def __unicode__(self):
return self.animal
这是我的views.py
的一部分从django.core.files.uploadedfile导入导入SimpleUploadedFile
def fan(request): # this is the function that saves my form into my models.
form = PetForm(request.POST or None)
if form.is_valid():
dad = form.save(commit=False)
dad.save()
if 'cat' in request.POST:
cat = request.POST['next']
else:
cat = reverse('world:index')
return HttpResponseRedirect(cat)
return render_to_response(
'fan.html',
{'form':PetForm()},
context_instance = RequestContext(request)
)
和我的fan.html
<form method="POST" "action">{% csrf_token %}
<ul>
{{ form.as_ul }}
</ul>
<input type = "submit" value= "Add Pets to Store" />
</form>
答案 0 :(得分:2)
因为您覆盖了宠物模型图像。删除表单中的图像。
class PetForm(forms.ModelForm):
animal =forms.CharField(max_length = 20,widget = forms.Textarea)
description =forms.CharField(max_length =20, widget = forms.Textarea)
owner = forms.ModelChoiceField(queryset=Store.objects.all())
class Meta:
model = Pet
fields = ('animal','description','owner','image')
//It's not necessary to defined again model field in the form. Once you call the model
//in the form it's understood what you want to show. You can only defined the model
//field again if you want something to add or embed in that field. Like for example you
//want to change the charfield in to textarea or you defined a queryset like you did
//above. Erase your max_length because you are already defined that in the model.
上传图片时,请不要忘记在表格中添加“multipart / form-data”
<form method="POST" enctype="multipart/form-data" "action" >
{% csrf_token %}
<ul>
{{ form.as_ul }}
</ul>
<input type = "submit" value= "Add Pets to Store" />
</form>