formset의 선택 가능한 선택을 제한하는 데 문제가 있습니다. 저는 다음과 같은 모델을 가지고 있습니다 : 직원, 부서, 프로젝트, 프로젝트 유형, 회원 및 역할. 직원은 formset에서 주어진 부서 프로젝트에 대해 수행하는 역할을 추가/제거 할 수 있습니다. 양식은 직원이 속한 부서에 속한 프로젝트로만 선택 가능한 프로젝트를 제한해야합니다.django : formset의 필드 선택을 제한하는 방법?
모델 :
class Department(models.Model):
name = models.CharField(max_length=20)
def __unicode__(self):
return self.name
class Employee(models.Model):
fname = models.CharField(max_length=15)
department = models.ForeignKey(Department)
def __unicode__(self):
return self.fname
class Projecttype(models.Model):
name = models.CharField(max_length=20)
def __unicode__(self):
return self.name
class Project(models.Model):
projecttype = models.ForeignKey(Projecttype)
department = models.ForeignKey(Department)
members = models.ManyToManyField(Employee, through='Membership')
def __unicode__(self):
return "%s > %s" % (self.department, self.projecttype)
class Role(models.Model):
name = models.CharField(max_length=20)
def __unicode__(self):
return self.name
class Membership(models.Model):
project = models.ForeignKey(Project, null=True)
department = models.ForeignKey(Department)
employee = models.ForeignKey(Employee)
role = models.ManyToManyField(Role, blank=True, null=True)
class Meta:
unique_together = (("project", "employee",),)
보기 :
def employee_edit(request, employee_id):
i = get_object_or_404(Employee, pk=employee_id)
MembershipFormSet = modelformset_factory(Membership, exclude=('department', 'employee'),)
f = MembershipFormSet(queryset=Membership.objects.filter(employee=i),)
return render_to_response('gcs/edit.html', {'item': i, 'formset': f, }, context_instance=RequestContext(request))
는 현재 유럽 연합 (EU)은 어떤 부서 프로젝트의 역할을 선택할 수 있습니다. 그것은이처럼 행동 것 :
프로젝트 옵션 :
Projects.objects.all()
나는 이런 식으로 뭔가 함께 프로젝트를 제한하려면 : LIMIT 프로젝트 CHOCIES TO :
Projects.objects.filter(department=i.department)
[이 스택 오버플로 질문] (http://stackoverflow.com/questions/622982/django-passing-custom-form-parameters-to-formset)이 상당히 있습니다 : 귀하의 경우에, 당신은 뭔가처럼 원하는 비슷한. 두 가지 접근 방식이 있습니다. 1)'__init__' 메쏘드에서 employee를 인수로 취하고 카레 함수를 사용하는 폼을 생성하십시오. 2) 뷰 기능에서 양식 클래스를 빌드하십시오.양식을 다른 곳에서 다시 사용할 필요가 없다면 두 번째 방법을 더 쉽게 사용할 수 있습니다. – Alasdair
python을 처음 사용하는 경우 model.py와 마찬가지로 뷰에서 양식 클래스를 구성합니까? – thedeepfield
답변으로 내 의견을 확장했습니다. – Alasdair