исходные данные django formset не поступают - PullRequest
0 голосов
/ 04 февраля 2012

это моя модель:

class Member(models.Model):
    profile = models.OneToOneField(Profile, editable=False, null=True)
    title = models.CharField(max_length=4, choices=TITLE_TYPES, null=True)
    name = models.CharField(max_length=100, null=True, verbose_name='Name') 
    lastname = models.CharField(max_length=100, null=True, verbose_name='LastName') 
    gender = models.CharField(max_length=1, choices=GENDER_CHOICES, null=True, verbose_name='Gender') 
    dob = models.DateField('dob')
    redressno = models.CharField(max_length=100, null=True, verbose_name='RedressNo') 

это моя форма

class MemberForm(ModelForm):
  dob = forms.DateField(required=False, input_formats=('%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y'))
  class Meta:
    model = Member
    exclude = ('profile',)    

это мое мнение:

     members = Member.objects.filter(profile=profiles)
data1 = serializers.serialize( "python", members)
        print data1[0]['fields']
        memarr=[] 
        for index, a in enumerate(data1):
          memarr.append(a['fields'])
        print memarr
        MemberFormSet = formset_factory(MemberForm, formset=BaseFormSet)    
        member_formset = MemberFormSet(initial=memarr)
        #here setting intial array of mem 
        mdata['form-TOTAL_FORMS']=u'2'
        mdata['form-INITIAL_FORMS']=u'0'
        mdata['form-MAX_NUM_FORMS']=u''

        member_formset = MemberFormSet(mdata)

        memberform = MemberForm(mdata)

    c = {'form': form, 'memberform': memberform, 'member_formset': member_formset}
    c.update(csrf(request))
    return render_to_response('edit_profile.html', c, RequestContext(request))

м с передачей исходных данных, новсе еще исходные данные не показываются в форме?

1 Ответ

4 голосов
/ 04 февраля 2012

Вот ваша проблема:

member_formset = MemberFormSet(initial=memarr)
...
member_formset = MemberFormSet(mdata)

Вы устанавливаете начальные данные для одного экземпляра FormSet, а затем отбрасываете этот экземпляр с начальными данными и перезаписываете другим новым экземпляром FormSet.

Вы можете упростить свой взгляд на это:

# If you are not using csrf middleware, use this decorator instead of ghetto magic
@csrf_protect
@render_to('edit_profile.html') # handy decorator from django-annoying
def profile_members_edit(request.profile):

    members = Member.objects.filter(profile=profiles)

    # iterate over the ValuesQuerySet gives a list of dicts for initial data
    member_data = list(members.values())

    # setting extra=<> and max_num=<> is easier than setting internal form data
    MemberFormSet = formset_factory(MemberForm, formset=BaseFormSet, extra=2)

    member_formset = MemberFormSet(initial=member_data)

    return {'member_formset': member_formset }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...