2010-11-29 2 views
7

Je voulais créer un formulaire d'édition à l'aide de ModelForm. Et mes modèles contiennent une classe générique en noir et blanc, donc si quelqu'un pouvait me suggérer la vue et un peu de modèle dans ce but, je serais très reconnaissant, car je suis nouveau à la langue.Création d'un formulaire à l'aide de Generic_inlineformset_factory à partir du formulaire modèle

Mes modèles ressemblent: -

class Employee(Person): 
    nickname = models.CharField(_('nickname'), max_length=25, null=True, 
     blank=True) 
    blood_type = models.CharField(_('blood group'), max_length=3, null=True, 
     blank=True, choices=BLOOD_TYPE_CHOICES) 
    marital_status = models.CharField(_('marital status'), max_length=1, 
     null=True, blank=True, choices=MARITAL_STATUS_CHOICES) 
    nationality = CountryField(_('nationality'), default='IN', null=True, 
     blank=True) 
    about = models.TextField(_('about'), blank=True, null=True) 
    dependent = models.ManyToManyField(Dependent, 
     through='DependentRelationship') 
    pan_card_number = models.CharField(_('PAN card number'), max_length=50, 
     blank=True, null=True) 
    policy_number = models.CharField(_('policy number'), max_length=50, 
     null=True, blank=True) 
    # code specific details 
    user = models.OneToOneField(User, blank=True, null=True, 
     verbose_name=_('user')) 

class Person(models.Model): 
     """Person model""" 
     title = models.CharField(_('title'), max_length=20, null=True, blank=True) 
     first_name = models.CharField(_('first name'), max_length=100) 
     middle_name = models.CharField(_('middle name'), max_length=100, null=True, 
      blank=True) 
     last_name = models.CharField(_('last name'), max_length=100, null=True, 
      blank=True) 
     suffix = models.CharField(_('suffix'), max_length=20, null=True, 
      blank=True) 
     slug = models.SlugField(_('slug'), max_length=50, unique=True) 


class PhoneNumber(models.Model) : 
    phone_number = generic.GenericRelation('PhoneNumber') 
    email_address = generic.GenericRelation('EmailAddress') 
    address = generic.GenericRelation('Address') 

    date_of_birth = models.DateField(_('date of birth'), null=True, blank=True) 
    gender = models.CharField(_('gender'), max_length=1, null=True, 
     blank=True, choices=GENDER_CHOICES) 

    content_type = models.ForeignKey(ContentType, 

Si quelqu'un pouvait me suggérer un lien ou si. ce serait une aide précieuse ...

Répondre

16

affichant la solution que j'ai trouvée. Après avoir jeté un oeil à la source de Generic_inlineformset_factory.

je fait mon avis que: -

def edit_contact(request): 
    c={} 
    profile = request.user.get_profile() 
    EmployeeFormSet = generic_inlineformset_factory(PhoneNumber,extra=0,can_delete=False) 
    EmployeeFormSet1=generic_inlineformset_factory(EmailAddress,extra=0,can_delete=False) 
    EmployeeFormSet2 = generic_inlineformset_factory(Address, extra = 0, can_delete=False) 
    if request.method == "POST": 
     p_formset = EmployeeFormSet(data=request.POST, instance = profile), 
     e_formset = EmployeeFormSet1(data=request.POST, instance = profile), 
     a_formset = EmployeeFormSet2(data=request.POST, instance = profile), 
     for e in p_formset: 
      if e.is_valid(): 
      e.save() 
     for e in e_formset: 
      if e.is_valid(): 
       e.save() 
     for e in a_formset: 
      if e.is_valid(): 
       e.save() 
     return HttpResponseRedirect('/forms/sucess-edit/') 
     else: 
      p_formset = EmployeeFormSet(instance = profile), 
      e_formset = EmployeeFormSet1(instance = profile), 
      a_formset = EmployeeFormSet2(instance = profile), 
     c.update({'p_formset': p_formset, 'e_formset': e_formset,'a_formset': a_formset}) 
     return render_to_response('forms/edit_contact.html',c, 
            context_instance=RequestContext(request)) 

Cela a fonctionné avec succès, je pense que ce serait une bonne aide si quelqu'un est en utilisant la relation générique dans leur modèle, et que vous souhaitez créer un formulaire pour l'édition cette information.

+0

Enfin, un exemple d'utilisation de generic_inline_formset_factory. Cela m'a vraiment aidé! Merci d'avoir posté votre réponse. – Brandon

Questions connexes