Django pet_person.user_id不能为空

Django pet_person.user_id不能为空,django,Django,我正在开发一个应用程序,在这个应用程序中,宠物用户可以创建个人资料并上传他们宠物的照片 当我访问我似乎无法理解的个人资料页面时,我遇到了这个错误。我最近创建了一个类似的应用程序,但从未见过我将我的模型与用户关联。我犯了很多错误。我感谢所有人的帮助,谢谢大家 我试图让用户在个人资料页面上传自己的照片 pet_person.user_id may not be NULL Traceback Switch to copy-and-paste view C:\o\mysite\pet\views

我正在开发一个应用程序,在这个应用程序中,宠物用户可以创建个人资料并上传他们宠物的照片

当我访问我似乎无法理解的个人资料页面时,我遇到了这个错误。我最近创建了一个类似的应用程序,但从未见过我将我的模型与用户关联。我犯了很多错误。我感谢所有人的帮助,谢谢大家

我试图让用户在个人资料页面上传自己的照片

 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上的Profile函数有关

我的模特

  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
部分我的观点.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)
)    
我的表格.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))    

我认为您的问题在于,在
PictureForm
中,您只需要图像字段。但是,此表单实际上是针对
个人
模型的。您的
人员
需要一个用户、一个姓名以及一个图像(实际上,图像是唯一可选的部分)。鉴于这些不是来自你的身体,你需要自己提供这些。请参见下面模型中的

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
字段不能为空

为了克服这个问题

保存您的表单,就像

`obj =  form.save(`commit = False`)`
 obj.user =Person(user=request.user) # If user is logged in 
 obj.save()

我明白我不能只更新图像。它需要与用户和图像你的英语是好的。宠物模型与此无关。我正在尝试将图像保存到Person模块中,但我无法保存表单,因为Person不能为null。但在表单中,您只传递图像字段,那么您如何期望用户Person Details Person登录?我尝试的是,当用户注册时,他只使用用户名和名称注册。一旦他登录并重定向到个人资料。他可以上传一张可以添加到人物模型中的图片。你认为图片应该是一个单独的模型吗?我可以发布我的答案吗?或者它已经修复了吗?@catherine是的,请检查。Cathi我给了你链接,请检查这个,我发现了问题,你必须检查我从两天开始尝试,没有得到任何答案thing@catherine什么我应该这样做:(.我想创建帐户,以便宠物用户可以创建自己的帐户profile@donkeyboy72出现该错误是因为您将用户字段设置为OneToOneField。在OneToOneField中,您只能保存一个唯一id,因此必须将其改为ForeignKey。
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)