2

我有以下模型:Department、Projects、Departmentprojects、Employees 和 Membership。一个部门有许多项目,项目有许多通过成员资格分配角色的员工。我正在尝试创建一个 InlineFormset,以便欧盟可以将员工的角色分配给多个项目。

我的模板呈现正确的标签和字段,但 Departmentprojects 标签和字段不显示项目的名称。它只显示“Departmentprojects 对象”。如何获取表单以呈现项目名称而不是“Departmentprojects 对象”?

--

浏览器中的当前模板:

部门项目标签:(下拉菜单有两个选项列为“部门项目对象”)角色:项目经理

浏览器中所需的模板:

部门项目名称1:项目经理

部门项目名称 2:其他角色

--

楷模:

class Projects(models.Model):
    name = models.CharField(max_length=20)
    def __unicode__(self):
        return self.name

class Department(models.Model):
    name = models.CharField(max_length=20)
    def __unicode__(self):
        return self.name

class Employees(models.Model):
    name = models.CharField(max_length=15)
    def __unicode__(self):
        return self.name

class Departmentprojects(models.Model):
    department = models.ForeignKey(Department)
    projects = models.ForeignKey(Projects)
    members = models.ManyToManyField(Employees, through='Membership')

class Membership(models.Model):
    departmentprojects = models.ForeignKey(Departmentprojects)
    employees = models.ForeignKey(Employees)
    role = models.CharField(max_length=20)

--

看法

def addtoprojects(request, employees_id):
    e = get_object_or_404(Employees, pk=employees_id)
    ProjectsInlineFormSet = inlineformset_factory(Employees, Membership, max_num=1)
    if request.method == "POST":
        formset = ContactInlineFormSet(request.POST, instance=e)
        if formset.is_valid():
            formset.save()
    else:
        formset = ProjectsInlineFormSet(instance=e)
    return render_to_response('gcstest/contact.html', {'e': e, 'formset': formset}, context_instance=RequestContext(request))

--

模板

<form method="post" action="/assign_to_project/{{ employees.id }}/">
    {% csrf_token %}
    <table>
        {{ formset }}
    </table>
    <input type="submit" value="Submit"/>
</form>
4

1 回答 1

3

向您的模型添加一个__unicode__方法,Departmentprojects例如

class Departmentprojects(models.Model):
    department = models.ForeignKey(Department)
    projects = models.ForeignKey(Projects)
    members = models.ManyToManyField(Employees, through='Membership')

    def __unicode__(self):
        return "%s > %s" % (self.department, self.projects)
于 2012-03-13T19:54:45.547 回答