DJANGO: Как отобразить имя объекта модели в форме, а не буквальный «объект модели»? - PullRequest
2 голосов
/ 13 марта 2012

У меня есть следующие модели: Отдел, Проекты, Проекты Отдела, Сотрудники и Членство. У Департамента есть много Проектов, и у Проектов есть много Сотрудников, которым назначены роли через Членство. Я пытаюсь создать InlineFormset, чтобы ЕС мог назначить роль сотрудника нескольким проектам.

Мой шаблон отображает правильные метки и поля, но в метках и полях Departmentprojects не отображаются названия проектов. Показывает только «объект отдела проекта». Как я могу получить форму для отображения имени проекта вместо "объекта Departmentprojects"?

-

Текущий шаблон в браузере:

Метка Departmentproject: (раскрывающееся меню с двумя опциями, перечисленными как «Объект 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)

-

VIEW

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>

1 Ответ

3 голосов
/ 13 марта 2012

Добавьте метод __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)
...