1

ペットユーザーがプロフィールを作成し、ペットの写真をアップロードできるアプリに取り組んでいます。

わからないプロフィールページにアクセスすると、このエラーが発生しました。最近、これに似たアプリを作成しましたが、モデルをユーザーに関連付けたことがあります。転倒してエラーが発生しました。皆様のご協力に感謝申し上げますとともに、ありがとうございました。

ユーザーが自分の写真をプロフィールページにアップロードできるようにしようとしています。

 pet_person.user_id may not be NULL

 Traceback Switch to copy-and-paste view
 C:\o\mysite\pet\views.py in Profile 
        form.save()

このエラーは、私のモデルとviews.pyのプロファイル関数に関連していると思います

私のmodels.py

  from django.db import models
  from django.db.models.signals import post_save
  from django.contrib.auth.models import User

class Person(models.Model):
    user = models.OneToOneField(User)
    name = models.CharField(max_length=100)
    image = models.FileField(upload_to="images/",blank=True,null=True)


    def __unicode__(self):
        return self.name

class Pet(models.Model):
    Person = models.ForeignKey(Person)
    description = models.CharField(max_length=100)
    image = models.FileField(upload_to="images/",blank=True,null=True)

    def __unicode__(self):
        return self.description

私のviews.pyの一部

def Profile(request):
    form = PictureForm(request.POST ,request.FILES or None)
    if form.is_valid():
        form.save()
    return render_to_response('profile.html',{'form':PictureForm()},context_instance = RequestContext(request)
)    

私のforms.py

 from django import forms
 from django.contrib.auth.models import User
 from django.forms import ModelForm
 from pet.models import *

 class UserRegistration(ModelForm):
    username = forms.CharField(widget = forms.Textarea)
    name = forms.CharField(widget = forms.Textarea)
    email = forms.EmailField(widget = forms.Textarea)
    password = forms.CharField(widget = forms.PasswordInput(render_value=False))
    password1 = forms.CharField(label =(u'Verify Password'), widget = forms.PasswordInput(render_value=False))

    class Meta:
        model = Person
        exclude = ('user',)
        fields = ('username','email','name','password','password1')

    def clean_username(self):
        username = self.cleaned_data['username']
        try:
            User.objects.get(username=username)
        except User.DoesNotExist:
            return username
        raise forms.ValidationError("That user is already taken , please select another ")

    def clean(self):
        if self.cleaned_data['password'] != self.cleaned_data['password1']:
            raise forms.ValidationError("The password does not match ")
        return self.cleaned_data

 class LoginForm(forms.Form):
    username = forms.CharField(widget = forms.Textarea)
    password = forms.CharField(widget = forms.PasswordInput(render_value=False))
    model = Person
    fields = ('username','password')


 class PictureForm(forms.ModelForm):

    class Meta:
        model = Person
        fields = ('image',)

@主人!

def Profile(request):
    form = PictureForm(request.POST ,request.FILES or None)
    if form.is_valid():
        event = form.save(commit=False)
        event.user=request.user
    event.save()
    return render_to_response('profile.html',{'form':PictureForm()},context_instance = RequestContext(request))    
4

3 に答える 3

1

以下のモデルで

class Person(models.Model):
    user = models.OneToOneField(User)
    name = models.CharField(max_length=100)
    image = models.FileField(upload_to="images/",blank=True,null=True)

user フォームのどこにも言及されていないというフィールドがあります。

そして、あなたのモデルPerson フィールドによると、nullにすることはできません。

その問題を克服するために

次のようにフォームを保存します

`obj =  form.save(`commit = False`)`
 obj.user =Person(user=request.user) # If user is logged in 
 obj.save()
于 2013-03-08T13:06:51.843 に答える
1
class PictureForm(forms.ModelForm):
    class Meta:
        model = Person
        fields = ('image',)

def Profile(request):
    person = Person(user=request.user)
    if request.method == 'POST':
        form = PictureForm(request.POST ,request.FILES or None, instance=person)
        if form.is_valid():
            form.save() 
    return render_to_response('profile.html',{'form':PictureForm()},context_instance = RequestContext(request)
于 2013-03-08T13:43:09.380 に答える
0

ここでのあなたの問題は、あなたの中PictureFormには画像フィールドだけを求めているということだと思います。ただし、このフォームは実際にはPersonモデル用です。ユーザーPersonと名前、および画像が必要です(実際、画像は唯一のオプション部分です)。これらはあなたのフォームから来ていないので、あなたはこれらを自分で供給する必要があります。https://docs.djangoproject.com/en/dev/topics/forms/modelforms/#using-a-subset-of-fields-on-the-formを参照してください

于 2013-03-08T13:01:55.753 に答える