2013-12-23 1 views
0

장고 프레임 워크에 문제가 있습니다. 구체적으로 사용자는 그룹을 만들고 그룹에 회원 (> = 1 & & < = 3)을 그룹에 연결할 수 있습니다. 각 회원은 이메일 주소 (고유)로 식별됩니다. 그러나 동일한 구성원은 서로 다른 그룹에서 다른 이름과 성을 사용하여 속행 할 수 있습니다. 그래서 나는 그룹과 회원간에 다분히 많은 관계를 맺고있다. 제 생각에는 인라인 폼셋이 있습니다. 내가 양식을 제출하지만 때 난 항상 얻을 :장고 inlineformset_factory

archi_groupmember.group_id이되지 않을 수 있습니다 NULL

사용자가를 선택하지 않기 때문에 내가의 MemberGroup 형태의 위젯을 변경 한

회원은 선택에서 왔지만 회원의 메일을 입력해야합니다. MemberGroup을 저장하기 전에 멤버를 유지해야한다고 생각하지만 어떻게 해야할지 모르겠습니다!

저는 장고를 처음 접했습니다. 문서를 팔로우하고 있습니다.

도움을 주셔서 감사합니다. 여기

페이지의 스크린 샷

은 명확하게 : http://postimg.org/image/bndh5ug29/

내 코드에 따라.

Models.py :

class Group(models.Model): 
    user = models.ForeignKey(User) 
    limit = Q(active = True) 
    project = models.ForeignKey(Project, limit_choices_to = limit) 
    name = models.CharField(max_length=100) 
    code = models.CharField(max_length=100, unique=True) 

    def __unicode__(self): 
     return self.name 


class Member(models.Model): 
    groups = models.ManyToManyField(Group, through='GroupMember') 
    email = models.EmailField(max_length=254, unique=True) 

    def __unicode__(self): 
     return self.email 


class GroupMember(models.Model): 
    group = models.ForeignKey(Group) 
    member = models.ForeignKey(Member) 
    name = models.CharField(max_length=100) 
    surname = models.CharField(max_length=100) 

views.py :

@login_required 
@user_passes_test(first_login_check, login_url='/detail') 
def partecipate(request): 
    from django.forms import TextInput 

    MemberFormSet = inlineformset_factory(Group, Member.groups.through, form=GroupMemberForm, can_delete=False, extra=3, widgets={'member': TextInput() }) 
    if request.method == 'POST': 

     form = GroupForm(request.POST) 
     member_set = MemberFormSet(request.POST) 

     if form.is_valid(): 

     for form in member_set: 
       print vars(form['member']) 

      group = form.save(commit=False) 
      group.user = request.user 
      group.code = ''.join(random.choice(string.ascii_uppercase + string.digits) for x in range(10)) 
      group.save() 

      member_set = MemberFormSet(request.POST, instance=group) 
      member_set = member_set.save(commit=False) 


      payment = Payment() 
      payment.group = group 
      payment.invoice = _createInvoice(group.project.id, group.id) 
      payment.save() 
      return HttpResponseRedirect("/") 
     else: 
      return render(request, "partecipate.html", { 'form': form, 'member_set' : member_set }) 
    else: 
     form = GroupForm() 
     form.Meta.model.project.queryset = Project.objects.filter(active=True) 
     member_set = MemberFormSet(initial=[ {'name': request.user.first_name,'surname': request.user.last_name,'member':request.user.email} ]) 

    return render(request, "partecipate.html", { 'form': form, 'member_set' : member_set }) 

답변

0

사용하는 장고의 버전은 무엇?

1.3 이후로 도움말 문서에는 인라인 형식 세트 번호의 사용 예가 있습니다. 그리고이 예 (아래 링크)는 부모 레코드의 인스턴스를 명확하게 전달하는 것을 보여줍니다. 이것이 없다면, 당신의 포맷 세트는 실제 데이터와 연결되지 않을 것입니다.

https://docs.djangoproject.com/en/1.7/topics/forms/modelforms/#using-an-inline-formset-in-a-view

는 또한 아이로 Member.groups.through 테이블 클래스를 지정하는 의심입니다. 통과 표가 내부 기계의 일부이기 때문에 구성원으로 두어야한다고 생각합니다.