Note that there are some explanatory texts on larger screens.

plurals
  1. PO"Column 'contact_id' cannot be null" with a ForeignKey Field
    primarykey
    data
    text
    <p>I'm looking for a way to get the contact.id to pass to my ForeignKey field. Right now it's returning an error stating the contact_id cannot be null. </p> <p>Here is my Models:</p> <pre><code>class Contact(models.Model): first_name = models.CharField(max_length=100, help_text="First Name") last_name = models.CharField(max_length=100, help_text="Last Name") email_address = models.EmailField(max_length=275) address = models.CharField(max_length=10, choices=ADDRESS_CHOICES) def __unicode__(self): return "%s %s" % (self.first_name, self.last_name) class LetterHead(models.Model): contact = models.ForeignKey(Contact, related_name='letterhead') address = models.CharField(max_length=10, choices=ADDRESS_CHOICES) quantity = models.CharField(max_length=4, choices=QUANTITY_CHOICES) </code></pre> <p>Here are my Views:</p> <pre><code>class ContactForm(forms.ModelForm): address = forms.ChoiceField(required=True, widget=RadioSelect(), choices=ADDRESS_CHOICES,) class Meta: model = Contact class LetterHeadForm(forms.ModelForm): address = forms.ChoiceField(required=False, widget=RadioSelect(), choices=ADDRESS_CHOICES) class Meta: model = LetterHead exclude = ('contact',) widgets = { 'quantity': forms.Select(choices=QUANTITY_CHOICES), } LetterHeadFormSet = modelformset_factory(LetterHead, form=LetterHeadForm, extra=2, max_num=2) </code></pre> <p>Here are my Views:</p> <pre><code>class OrderFormProcessor(object): def __init__(self, contact=None, contact_form_class=ContactForm, letterhead_form_class=LetterHeadFormSet, send_notification=False): self.contact_form_class = contact_form_class self.letterhead_form_class = letterhead_form_class self.send_notification = send_notification self.contact = contact def process(self, request, context=None): if not context: context = {} data = request.POST or None contact = self.contact contact_form = self.contact_form_class(data, instance=contact) forms = dict( contact_form=contact_form, ) formsets = dict( letterhead_formset=self.letterhead_form_class(data, prefix='letterhead_'), ) if request.method == 'POST': for f in forms.values() + formsets.values(): print f.__class__, f.is_valid() form_is_valid = all([f.is_valid() for f in forms.values() + formsets.values()]) if form_is_valid: contact = forms['contact_form'].save() letterhead_form = formsets['letterhead_formset'] for lf in letterhead_form: lf.contact_id = contact.id lf.save() if self.send_notification: email = OrderFormNotification(to=[settings.NO_REPLY_EMAIL_ADDRESS], extra_context=data) email.send() else: pass all_forms = chain(forms.values(), chain.from_iterable(formsets.values())) context = context.copy() context.update(forms.items() + formsets.items()) context.update( error_list=list(chain.from_iterable([form.errors.values() for form in all_forms])), ) return (forms, formsets), context </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload