【问题标题】:How can I display my data in the admin from many to many field in django?如何在 django 的多对多字段的管理中显示我的数据?
【发布时间】:2016-11-21 09:25:52
【问题描述】:

我需要一些关于 django 管理中多对多的帮助。 我保存在团队模型中的值没有显示在我的成员部分。下拉列表为空,在我的团队模型管理员中,数据仅显示在过滤器部分,而不显示在主列表中。 这是我的模型:

DEPARTMENT = (

    ('C', 'Children'),
    ('C', 'Choir'),
    ('C', 'Cleaning'),

)
class Team(models.Model):
    name = models.CharField(choices=DEPARTMENT, max_length=10)
    member = models.ManyToManyField('Member', related_name='team')

    class Meta:
        verbose_name = 'Team'

    def __str__(self):
        return self.name


class Member(models.Model):
    surname = models.CharField(max_length=20)
    names = models.CharField(max_length=50)
    gender = models.CharField(choices=GENDER, max_length=1)
    dob = models.DateField()
    contact_number = models.CharField(max_length=14, help_text="+27740000000")
    email = models.EmailField(help_text='your email address')
    address = models.CharField(max_length=50, help_text="you street, number, complex name only")
    suburb = models.CharField(max_length=20, help_text="your suburb")
    area_code = models.IntegerField(help_text="0000")
    province = models.CharField(max_length=1, choices=PROVINCE)
    occupation = models.CharField(max_length=30, help_text="Your daily occupation")
    registered_date = models.DateField(default=timezone.now)

    def __str__(self):
        return self.surname

在管理员中:

class TeamInline(admin.TabularInline):
    model = Team.member.through
    extra = 1


@admin.register(Member)
class MemberAdmin(admin.ModelAdmin):
    list_display = ('surname', 'names', 'email', 'contact_number', 'suburb')
    fieldsets = (
        ('Member personal details', {
            'classes': ('grp-collapse grp-open',),
            'fields': ('surname', 'names', 'gender', 'dob', 'contact_number', 'email',
                       'address', 'suburb', 'area_code', 'province', 'occupation', 'registered_date',
                       ),
    }),
    )
    list_filter = ['surname', 'email', 'suburb']
    inlines = [MaritalInline, TeamInline, MembershipInline,]


@admin.register(Team)
class TeamAdmin(admin.ModelAdmin):
    list_display = ('name',)
    fieldsets = (
        ('Team details', {
            'fields': ('name',),
    }),
    )
    list_filter = ['name', ]
    inlines = [TeamInline, ]

这是我的截图:

【问题讨论】:

  • DEPARTMENT 选项怎么都具有相同的值?
  • 同一个值是什么意思?
  • choices 是一个元组列表(value, verbose_name),你所有的值都是'C'

标签: django django-admin many-to-many


【解决方案1】:

内联用于相关关系,而不是多对多。您必须使用表单域。默认为<select multiple>,这不是很吸引人,但您可以使用select2 使其更性感(另请参阅django-autocomplete-light 以简化与Django 的select2 集成)或create a custom fieldwidget

【讨论】:

  • 谢谢,但是如何在管理员中使用 select2?并且 teaminline 中的这条线是正确的模型 = Team.member.through??或者我应该完全删除teaminline。你介意更明确地说明如何让它工作吗?谢谢@AntoinePinsard
  • 您需要的一切都在我指出的链接中,没有单一的解决方案。阅读文档由您决定。这个问题被问了不知多少次:stackoverflow.com/search?q=django+admin+many-to-many+widget
猜你喜欢
  • 2021-06-20
  • 2017-02-01
  • 1970-01-01
  • 2020-06-29
  • 2022-11-08
  • 2019-01-26
  • 2011-06-26
  • 2021-03-01
  • 2011-07-07
相关资源
最近更新 更多