장고 프레임 워크에 문제가 있습니다. 구체적으로 사용자는 그룹을 만들고 그룹에 회원 (> = 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 })