问题描述
我正在尝试使用 createview 在我的模型中创建一个新条目。模型 Venue 与 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']
查看:
class EvCreate(CreateView):
form_class=AdressForm
template_name='kammem/create.html'
success_url=reverse_lazy('event')
def form_valid(self,form):
street=form.cleaned_data['street']
snumb=form.cleaned_data['snumb']
town=form.cleaned_data['street']
postn=form.cleaned_data['postn']
form.vadress=Adress.objects.create(street=street,snumb=snumb,town=town,postn=postn)
return super().form_valid(form)
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,primary_key=True)
def __str__(self):
return 'Venue: ' + self.vname
url.py
path('evcreate/',EvCreate.as_view(),name='evcreate'),
我真的在寻找答案,但没有成功。有什么线索吗?
解决方法
您缺少已设置为主键的地址。
在 AdressForm 中,您已经排除了 padress,如果表单有效,Django 创建视图会自动创建对象。
尝试这样的事情
def form_valid(self,form):
form.padress = # Adress object
form.save()
# rest