0

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!

1 Answer 1

2

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')
Sign up to request clarification or add additional context in comments.

1 Comment

Thanks, this worked! Should I remove the instance for the seller_event form?

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.