1

我有一个应用程序可以让您创建个人资料。我的应用程序功能之一是它可以让您编辑您的姓名并上传图片。

问题是用户无法提交图像,除非他输入他的姓名。我该如何修复此页面以使其如此如果用户提交图像但未提交名称。如果他没有提交图像并更改了他的名字,他仍将使用他的旧名字。他还会有他的老照片吗?

我尝试添加 blank=True 和 null = False , null = True 但似乎没有做这项工作

我的模型.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

我的表格.py

 class PersonForm(forms.ModelForm):
    class Meta:
        model = Person
        fields = ('image','name',)

我的观点.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()})

在此处输入图像描述

4

2 回答 2

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()})
于 2013-03-13T10:29:24.567 回答
1

django forms对用户数据进行验证

验证在两个级别上完成:

  1. 现场级别:

    • 如果该字段是必需的并且用户没有输入任何数据,则会引发错误
    • 如果用户为该字段输入了格式不正确的数据,则会引发错误
    • 您可以通过实现名为的函数来覆盖字段验证的行为clean_fieldname
    • 这种类型的验证导致form.field.errors
  2. 表单级别:

    • 检查任何(非特定领域的)验证错误
    • clean您可以通过实现方法来覆盖行为
    • 这种类型的验证导致form.non_field_errors

从您的模型中:

图像不允许为空白,这意味着它是必需的。不输入图像会引发错误

让空白=真名称和图像

我还建议使用form.save()而不是从视图中保存模型

还有一个内置的 ImageField 用于保存图像

于 2013-03-13T10:28:23.930 回答