【发布时间】:2012-04-02 08:10:33
【问题描述】:
我在限制表单集中的可选选项时遇到问题。我有以下模型:员工、部门、项目、项目类型、成员资格和角色。员工可以在表单集中添加/删除他们为给定部门项目所扮演的角色,表单应将可选项目限制为仅属于员工所属部门的项目。
型号:
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))
目前,欧盟可以为任何部门的项目选择一个角色。它的行为是这样的:
项目选项:
Projects.objects.all()
我想通过以下方式限制项目:LIMIT PROJECT CHOCIES TO:
Projects.objects.filter(department=i.department)
【问题讨论】:
-
This stack overflow question 非常相似。有两种方法有效。 1) 在其
__init__方法中创建一个将employee 作为参数的表单并使用curry 函数。 2)在视图函数中构建表单类。如果您不需要在其他地方重用表单,我发现第二种方法更容易。 -
python 新手,您是否像在 model.py 中那样在视图中构造表单类?
-
我已将我的评论扩展为下面的答案。
标签: django django-forms