简体   繁体   中英

Working with multiple related django modelforms

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM