Django管理员更改下拉标签
我想知道如何更改Django Admin创建的下拉列表的标签。 以下是两个模型: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)
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)