Note that there are some explanatory texts on larger screens.

plurals
  1. POTesting Django Inline ModelForms: How to arrange POST data?
    primarykey
    data
    text
    <p>I have a Django 'add business' view which adds a new business with an inline 'business_contact' form.</p> <p>The form works fine, but I'm wondering how to write up the unit test - specifically, the 'postdata' to send to self.client.post(settings.BUSINESS_ADD_URL, postdata)</p> <p>I've inspected the fields in my browser and tried adding post data with corresponding names, but I still get a 'ManagementForm data is missing or has been tampered with' error when run.</p> <p>Anyone know of any resources for figuring out how to post inline data?</p> <p>Relevant models, views &amp; forms below if it helps. Lotsa thanks.</p> <p>MODEL:</p> <pre><code>class Contact(models.Model): """ Contact details for the representatives of each business """ first_name = models.CharField(max_length=200) surname = models.CharField(max_length=200) business = models.ForeignKey('Business') slug = models.SlugField(max_length=150, unique=True, help_text=settings.SLUG_HELPER_TEXT) created = models.DateTimeField(auto_now_add=True) updated = models.DateTimeField(auto_now=True) phone = models.CharField(max_length=100, null=True, blank=True) mobile_phone = models.CharField(max_length=100, null=True, blank=True) email = models.EmailField(null=True) deleted = models.BooleanField(default=False) class Meta: db_table='business_contact' def __unicode__(self): return '%s %s' % (self.first_name, self.surname) @models.permalink def get_absolute_url(self): return('business_contact', (), {'contact_slug': self.slug }) class Business(models.Model): """ The business clients who you are selling products/services to """ business = models.CharField(max_length=255, unique=True) slug = models.SlugField(max_length=100, unique=True, help_text=settings.SLUG_HELPER_TEXT) description = models.TextField(null=True, blank=True) primary_contact = models.ForeignKey('Contact', null=True, blank=True, related_name='primary_contact') business_type = models.ForeignKey('BusinessType') deleted = models.BooleanField(default=False) created = models.DateTimeField(auto_now_add=True) updated = models.DateTimeField(auto_now=True) address_1 = models.CharField(max_length=255, null=True, blank=True) address_2 = models.CharField(max_length=255, null=True, blank=True) suburb = models.CharField(max_length=255, null=True, blank=True) city = models.CharField(max_length=255, null=True, blank=True) state = models.CharField(max_length=255, null=True, blank=True) country = models.CharField(max_length=255, null=True, blank=True) phone = models.CharField(max_length=40, null=True, blank=True) website = models.URLField(null=True, blank=True) class Meta: db_table = 'business' def __unicode__(self): return self.business def get_absolute_url(self): return '%s%s/' % (settings.BUSINESS_URL, self.slug) </code></pre> <p>VIEWS:</p> <pre><code>def business_add(request): template_name = 'business/business_add.html' if request.method == 'POST': form = AddBusinessForm(request.POST) if form.is_valid(): business = form.save(commit=False) contact_formset = AddBusinessFormSet(request.POST, instance=business) if contact_formset.is_valid(): business.save() contact_formset.save() contact = Contact.objects.get(id=business.id) business.primary_contact = contact business.save() #return HttpResponse(help(contact)) #business.primary = contact.id return HttpResponseRedirect(settings.BUSINESS_URL) else: contact_formset = AddBusinessFormSet(request.POST) else: form = AddBusinessForm() contact_formset = AddBusinessFormSet(instance=Business()) return render_to_response( template_name, { 'form': form, 'contact_formset': contact_formset, }, context_instance=RequestContext(request) ) </code></pre> <p>FORMS:</p> <pre><code>class AddBusinessForm(ModelForm): class Meta: model = Business exclude = ['deleted','primary_contact',] class ContactForm(ModelForm): class Meta: model = Contact exclude = ['deleted',] AddBusinessFormSet = inlineformset_factory(Business, Contact, can_delete=False, extra=1, form=AddBusinessForm, ) </code></pre>
    singulars
    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.
 

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