Django管理员更改下拉标签

Django管理员更改下拉标签,django,admin,Django,Admin,我想知道如何更改Django Admin创建的下拉列表的标签。 以下是两个模型: class Media(models.Model): race = models.ForeignKey(Race, verbose_name = _('race'), blank=True, null=True) caption = models.CharField(verbose_name=_('caption'), max_length=255, blank=True, null=True)

我想知道如何更改Django Admin创建的下拉列表的标签。 以下是两个模型:

class Media(models.Model):
    race = models.ForeignKey(Race, verbose_name = _('race'), blank=True, null=True)
    caption = models.CharField(verbose_name=_('caption'), max_length=255, blank=True, null=True)
    credit = models.CharField(verbose_name=_('credit'), max_length=255, blank=True, null=True)
    image = FileBrowseField("Image", max_length=200)

    # Meta
    date_updated = models.DateTimeField(auto_now=True, auto_now_add=True, verbose_name=_('date updated'))
    date_added = models.DateTimeField(auto_now=False, auto_now_add=True, verbose_name=_('date added'))

class Race(models.Model):
    category = models.ForeignKey(Category, verbose_name = _('category'))
    name = models.CharField(max_length=255, verbose_name=_('name'))
    slug = models.SlugField(max_length = 128, help_text = _('Automatic generated. Do not edit!'))
    state = models.CharField(max_length=255, verbose_name=_('state'), blank=True, null=True)
    city = models.CharField(max_length=255, verbose_name=_('city'), blank=True, null=True)
    description = models.TextField(verbose_name=_('description'), blank=True, null=True)
    banner = models.FileField(max_length = 255, upload_to = '_static/img/races/', verbose_name = _('banner'), blank=True, null=True)
    title = models.FileField(max_length = 255, upload_to = '_static/img/races/', verbose_name = _('title'), blank=True, null=True)
    bigbox = models.FileField(max_length = 255, upload_to = '_static/img/races/', verbose_name = _('big box'))
    midbox = models.FileField(max_length = 255, upload_to = '_static/img/races/', verbose_name = _('medium box'), blank=True, null=True)
    smallbox = models.FileField(max_length = 255, upload_to = '_static/img/races/', verbose_name = _('small box'), blank=True, null=True)
    course = models.FileField(max_length = 255, upload_to = '_static/img/races/', verbose_name = _('course'), blank=True, null=True)
    rules = models.CharField(max_length=255, blank=True, verbose_name=_('rules'))
    results = models.CharField(max_length=255, blank=True, verbose_name=_('results'))
    date = models.DateTimeField(auto_now=False, auto_now_add=False, verbose_name=_('date'), blank=True, null=True)
    active = models.BooleanField(default=True)

    # Meta
    date_updated = models.DateTimeField(auto_now=True, auto_now_add=True, verbose_name=_('date updated'))
    date_added = models.DateTimeField(auto_now=False, auto_now_add=True, verbose_name=_('date added'))
我需要的是:

添加新媒体时选择比赛的下拉列表不仅应显示比赛名称,还应显示添加的比赛日期

任何帮助或指导都将不胜感激


谢谢

您可以通过创建自己的管理表单来实现这一点,该表单为
race
使用ModelChoiceField的子类,该子类覆盖。例如:

然后,在admin中,将
MediaAdminForm
设置为admin类的
form

您可能可以在admin中使用
formfield\u for\u foreignkey
钩子返回RaceChoiceField,而不是创建一个全新的表单,但我必须阅读源代码,以确保获得准确的详细信息,因此我不会编写该版本


这将影响“更改”视图和“添加”视图-如果要将其限制为仅添加视图,则会变得更加困难。你必须在你的管理员上覆盖
add\u view
方法。

你不能在比赛模型上定义str/unicode吗?路易斯,它已经定义了,但我需要它只是比赛名称。我唯一需要名称和时间戳的时候是在页面上添加新媒体。
from django.forms import ModelChoiceField, ModelForm

class RaceChoiceField(ModelChoiceField):
    def label_from_instance(self, race_instance):
        return race.name + ' ' + str(race.date)

class MediaAdminForm(ModelForm):
    class Meta:
        model = Media
    race = RaceChoiceField(Race)