Python 在django中使用createview时,NOT NULL约束失败错误

Python 在django中使用createview时,NOT NULL约束失败错误,python,django,model,relation,Python,Django,Model,Relation,我正在尝试使用createview在模型中创建一个新条目。模型场地与Adress模型处于一对一关系,我无法让它升级该模型。我尝试使用自定义表单,但总是出现以下错误: IntegrityError at /evcreate/ NOT NULL constraint failed: kammem_person.padress_id form.py: class AdressForm(ModelForm): street=CharField(max_length=100) snu

我正在尝试使用createview在模型中创建一个新条目。模型场地与Adress模型处于一对一关系,我无法让它升级该模型。我尝试使用自定义表单,但总是出现以下错误:

IntegrityError at /evcreate/

NOT NULL constraint failed: kammem_person.padress_id
form.py:

class AdressForm(ModelForm):

    street=CharField(max_length=100)
    snumb=CharField(max_length=15)
    town=CharField(max_length=100)
    postn=CharField(max_length=5,validators=[postnvali])
    
    class Meta:
        model=Person
        exclude=['padress']
视图:

models.py

class Person(Model):

    fname=CharField(default="missing",max_length=100)
    lname=CharField(default="missing",max_length=100)
    mobil=PhoneField(default='9999999999')
    mail=EmailField(default='contact@gmail.com')
    padress=OneToOneField(Adress,on_delete=CASCADE,primary_key=True)

    def __str__(self):
        return self.fname

    class Meta:
        ordering=('fname','lname')

class Venue(Model):

    vname=CharField(default="",max_length=100)
    vamil=EmailField(default='contact@gmail.com')
    vpage=CharField(default='homepage',max_length=100)
    vadress=OneToOneField(Adress,on_delete=CASCADE,,primary_key=True)
    
    def __str__(self):
        return 'Venue: ' + self.vname
url.py

   path('evcreate/',EvCreate.as_view(),name='evcreate'),

我真的在寻找答案,但没有成功。有什么线索吗?

您缺少了您设置为主键的padress

在AdressForm中,您已排除了padress,Django creates视图会自动创建对象(如果窗体有效)

试试这样的

def form_valid(self,form):
    form.padress = # Adress object
    form.save()
    # rest 

form.vadress=
你是想写
form.instance.padress=
(在你的
form\u类
EvCreate
的有效方法中)吗?此外,鉴于姓名地址表是一种使人成为实例的形式,因此其误导性很大。姓名地址表是误导性的,没错。是的,我的意思是form.instance.padress=对不起,但它仍然给出相同的错误
def form_valid(self,form):
    form.padress = # Adress object
    form.save()
    # rest