Sbiju Mon
Sbiju Mon

Reputation: 29

how to automatically set foreign key in django create view

I want to assign the profile instance automatically to order, I tried as shown in views, but still form error shows profile required. Hope somebody can help, Thank you.

models.py

class Profile(models.Model):
    user = models.OneToOneField(settings.AUTH_USER_MODEL)
    first_name = models.CharField(max_length=80,blank=True, null=True)
    middle = models.CharField(max_length=80, blank=True, null=True)
    last_name = models.CharField(max_length=80, blank=True, null=True)


class Order(models.Model):
        profile = models.ForeignKey(Profile)
        qty_ordered = models.IntegerField(blank=True, null=True)

views.py

class OrderCreate(CreateView):
model = Order
form_class = OrderForm

success_url = reverse_lazy('home')

def form_valid(self, form):
    form.instance.order_id = self.kwargs.get('pk')
    return super(OrderCreate, self).form_valid(form)

order_form.html

<form method='POST' action='' enctype='multipart/form-data'>{% csrf_token %}
    {{ form.qty_ordered| as_crispy_field }}
<input type='submit' class='btn btn-primary' value='Save & Continue' />

Upvotes: 0

Views: 1306

Answers (1)

NS0
NS0

Reputation: 6096

Try adding the following inside the form_valid method.

def form_valid(self, form):
    # ...
    profile = Profile.objects.get(user=self.request.user) # or something similar 
    form.instance.profile = profile
    # return the super as you do

Upvotes: 1

Related Questions