django отображать содержание - PullRequest
2 голосов
/ 12 августа 2010

Я пытаюсь показать содержимое поля многие в интерфейсе администратора.У меня есть следующий код:

class Member(models.Model):
    group = models.ManyToManyField('Group')

    def group_gp_name(self):
        return self.group.gp_name

    def __unicode__(self):

        return u'%s' % (self.id)

class Group(models.Model):
    gp_name = models.TextField(verbose_name=u'Group Name')

    def __unicode__(self):
        return u'%s - %s' % (self.id, self.gp_name)

В админке у меня есть что-то вроде этого:

class MemberAdmin(admin.ModelAdmin):
    list_display = ('group_gp_name')

Этот метод работал для отображения данных Foreignkey.Очевидно, что это не работает с ManytoManyFields ... поэтому мой вопрос, как я могу показать названия моей группы на моей странице администратора в разделе Член.Поэтому, когда я нажимаю в администраторе «Член», я хочу немедленно увидеть содержимое имен групп, связанных множеством отношений?

ОБНОВЛЕНИЕ !!!- Я не хочу показывать их на своей странице изменений, просто хочу увидеть результат в таблице.Я нашел это, и это почти то, что я хочу:

    def get_sol(self):
        return self.group.all()

Это работает, но представление немного странно, оно показывает что-то вроде этого:

<Group: Administrators >]

Проблема в том,я не хочу видеть эти '[Group:' и '>]', так как мне избавиться от них?

UPDATE2 !!!

Это помогло мне, ночто, если, например, это произойдет?У меня есть третья таблица под названием «Тест», подобная этой:

class Test(models.Model):
    member = models.ForeignKey('Member')

Теперь я хочу показать в представлении администратора «Проверить» имя группы из таблицы «Группа», как это возможно?

Любая помощь приветствуется.

С уважением, T

Ответы [ 2 ]

0 голосов
/ 12 августа 2010

Вы не можете использовать это так.Потому что ManyToManyFields создает промежуточную таблицу для соединения двух таблиц.Таким образом, группа может вернуть более одного результата.

def group_gp_name(self):
    a = self.group.select_related()
    # this will return you a list, so
    return ','.join(x.gp_name for x in a)

Это вернет вам все связанные значения pg_name, разделенные (,)

ОБНОВЛЕНИЕ:

class Test(models.Model):
    member = models.ForeignKey('Member')


def get_gp_name(self):
    ','.join(x.gp_name for x in self.member.group.select_related())

С момента отправкичужой, у вас нет проблем с использованием "."нотация для использования отношения иностранного ключа.

0 голосов
/ 12 августа 2010

Если вы хотите видеть поле «многие ко многим» со страницы изменений, вам нужно использовать админские строки .

class GroupInline(admin.TabularInline):
    model = Group

class MemberAdmin(admin.ModelAdmin):
    list_display = ('group_gp_name')
    inlines = [
        GroupInline,
    ]

Опубликовать интересующее вас обновлениев списке, а не на странице изменений, попробуйте изменить get_sol на:

def get_sol(self):
  return '; '.join([group.gp_name for group in self.group.all()])

Опубликовать ваше второе обновление, добавить метод на Test:

class Test(models.Model):
    member = models.ForeignKey('Member')

    def get_member_sol(self):
      return self.member.get_sol()
...