2010-11-29 3 views
7

ModelForm을 사용하여 편집 양식을 만들고 싶습니다.Model Form에서 Generic_inlineformset_factory를 사용하여 양식 만들기

그리고 내 모델에는 일반 관계 b/w 클래스가 포함되어 있으므로 누구나 저에게 언어에 익숙하지 않은 사람에게보기와 템플릿을 제안 할 수 있다면 매우 감사 할 것입니다. 누군가가 나에게 링크 정도를 제안 할 수 있다면

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, 

- :

내 모델처럼 보인다. 그것은 큰 도움이 될 것입니다 ........

답변

16

내가 발견 한 해결책을 게시. Generic_inlineformset_factory의 소스를 살펴 본 후. 로

내가 내 시야를 만든 : -

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)) 

이 성공적 일, 나는 어떤 사람이 자신의 모델의 일반 관계를 사용하는 경우 그것은 좋은 도움이 될 것이라고 생각하고, 편집을위한 양식을 만들려면 그 정보.

+0

마지막으로 generic_inline_formset_factory를 사용하는 방법의 예입니다. 이것은 정말로 나를 도와 줬다! 답변을 게시 해 주셔서 감사합니다. – Brandon