I'm trying to get two forms derived from related models to display on the same page and save together.
This is my models.py:
class userinfo(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL, primary_key= True,
on_delete=models.CASCADE)
name = models.CharField(max_length = 200, blank = True)
email = models.EmailField(max_length= 300, default = 'Null')
phone = models.CharField(max_length= 10, default = 'Null')
def __unicode__(self):
return self.user
class seller_event(models.Model):
event_id = models.AutoField(primary_key=True)
user = models.ForeignKey(settings.AUTH_USER_MODEL,
on_delete=models.CASCADE)
title = models.CharField(max_length = 300, default = 'Null')
description = models.CharField(max_length = 300, default = 'Null')
location = models.CharField(max_length= 300, default = 'Null')
cash_payment = models.BooleanField(default=False)
paytm_payment = models.BooleanField(default=False)
def __unicode__(self):
return str(self.event_id) + str(self.title)
As you can see, the user (saved as user_id in my sqlite3 db) is the foreign key from the userinfo table. I'm trying to get multiple events listed for each seller.
forms.py:
class Userinfo(forms.ModelForm):
class Meta:
model = userinfo
exclude = {'user'}
class Seller_event(forms.ModelForm):
class Meta:
model = seller_event
exclude = {'user'}
views.py:
def newlist(request):
if request.user.is_authenticated():
user = request.user
print user
if request.method == 'POST':
userinfo_form = Userinfo(request.POST, instance = user.userinfo)
seller_event_form = Seller_event(request.POST, instance =
user.seller_event)
if userinfo_form.is_valid() and seller_event_form.is_valid():
userinfo_form.save()
seller_event_form.save()
return redirect('/home')
else:
userinfo_form = Userinfo()
seller_event_form = Seller_event()
return render(request, 'home/newlist.html', {'userinfo_form':
userinfo_form, 'seller_event_form': seller_event_form })
html:
{% load static %}
<form action="/home/newlist/" method="post">
{% csrf_token %}
{{ userinfo_form.as_p }}
{{ seller_event_form.as_p }}
<input type="submit">
</form>
I suspect the problem is that while for userinfo, the user pk is a onetoone, there is no issue with identifying the model. However, this is not the case for seller_event. Here it is a fk. So, how do I get it to accept the user as an fk?
Thanks in advance!
After form validation, save your form without committing, then set your foreign key and save.
if userinfo_form.is_valid() and seller_event_form.is_valid():
userinfo_form.save()
new_seller_event = seller_event_form.save(commit=False)
new_seller_event.user = user
new_seller_event.save()
return redirect('/home')
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.