我有一个可以让你创建个人资料的应用。 我的应用功能之一就是让您编辑名称并上传图片。
问题是用户无法提交图像,除非他输入他的名字。如何修改此页面以使其成为如此用户如果用户提交图像但未提交姓名。他仍然会有他原来的名字 或者如果他没有提交图像并更改他的名字。他还会有他的旧照片吗?
我尝试添加blank = True和null = False,null = True但似乎没有完成这项工作
我的models.py
class Person(models.Model):
user = models.ForeignKey(User)
name = models.CharField(max_length=100,null=True,blank=False)
image = models.FileField(upload_to="images/")
def __unicode__(self):
return self.name
我的forms.py
class PersonForm(forms.ModelForm):
class Meta:
model = Person
fields = ('image','name',)
我的views.py
def Display(request):
if not request.user.is_authenticated():
return HttpResponseRedirect(reverse('world:LoginRequest'))
if request.method == 'POST':
form = PersonForm(request.POST, request.FILES)
if form.is_valid():
person = Person.objects.get(user=request.user)
person.image = form.cleaned_data['image']
person.name = form.cleaned_data['name']
person.save()
return render(request,'edit.html',{'form': PersonForm()})
答案 0 :(得分:2)
class Person(models.Model):
user = models.ForeignKey(User)
name = models.CharField(max_length=100, blank=True)
image = models.FileField(upload_to="images/", blank=True)
def __unicode__(self):
return self.name
def Display(request):
if not request.user.is_authenticated():
return HttpResponseRedirect(reverse('world:LoginRequest'))
if request.method == 'POST':
form = PersonForm(request.POST, request.FILES)
if form.is_valid():
image = form.cleaned_data['image']
name = form.cleaned_data['name']
person = Person.objects.get(user=request.user)
if image:
person.image = form.cleaned_data['image']
if name:
person.name = form.cleaned_data['name']
person.save()
return render(request,'edit.html',{'form': PersonForm()})
答案 1 :(得分:1)
django表单对用户数据进行验证
验证在两个层面完成:
字段级别:
clean_fieldname
form.field.errors
表单级别:
clean
方法form.non_field_errors
来自你的模特:
图像不允许为空白,这意味着它是必需的。不输入图像会引发错误
对于名称和图像,请将blank = True
我还建议使用form.save()而不是视图中的保存模型
还有一个用于保存图像的内置ImageField