1

プロフィールを作成できるアプリがあります。私のアプリの機能の 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

私の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()})

ここに画像の説明を入力

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フォームはユーザーデータの検証を行います

検証は次の 2 つのレベルで行われます。

  1. フィールドレベル:

    • フィールドが必須であり、ユーザーがデータを入力しなかった場合、エラーが発生します
    • ユーザーがそのフィールドに不適切な形式のデータを入力すると、エラーが発生します
    • 次の名前の関数を実装することにより、フィールド検証の動作をオーバーライドできます。clean_fieldname
    • このタイプの検証の結果、form.field.errors
  2. フォームレベル:

    • (非フィールド固有の) 検証エラーをチェックします
    • cleanメソッドを実装することで動作をオーバーライドできます
    • このタイプの検証の結果、form.non_field_errors

あなたのモデルから:

画像を空白にすることはできません。つまり、必須です。画像を入力しないとエラーが発生します

name と image の両方で blank=True にする

また、ビューからモデルを保存するよりもform.save()を使用することをお勧めします

また、画像を保存するための ImageField が組み込まれています。

于 2013-03-13T10:28:23.930 に答える