Reputation: 355
I am trying to create a new entry in my model using createview. the model Venue is in a onetone relation with Adress model and I cannot get it to upate that model. I have tried to use a custom form but I always get the following error:
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']
view:
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='[email protected]')
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='[email protected]')
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'),
I have really searched for an answer but with no succes. Any clues?
Upvotes: 0
Views: 344
Reputation: 5854
You are missing padress which you have set as Primary Key.
In AdressForm you have excluded padress and Django creates view automatically creates the object if the form is valid.
try something like this
def form_valid(self,form):
form.padress = # Adress object
form.save()
# rest
Upvotes: 0