2014-09-03 137 views
0

我想知道如何更改由Django Admin创建的下拉列表的标签。 以下两个型号:Django管理员更改下拉标签

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')) 

我需要的是这样的:

下拉添加新媒体时选择的种族应该展现的不仅是比赛的名字,但DATE_ADDED以及比赛。

任何帮助或方向将不胜感激。

谢谢!

+0

无法在Race模型上定义__str__/__unicode__? – 2014-09-03 15:57:31

+0

路易斯,它被定义,但我需要它只是赛名。我唯一需要的名称和时间戳是在页面上添加新媒体。 – 2014-09-03 17:44:12

回答

1

您可以通过创建自己的管理员表单来实现此目的,该表单使用ModelChoiceField的子类race,其中一个替代label_from_instance。 EG:

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) 

然后,在你的管理,设置MediaAdminForm为您的管理类form值。

您可能可以使用管理中的formfield_for_foreignkey挂钩来返回RaceChoiceField,而不是创建一个全新的表单,但是我必须阅读源代码以确保我得到的细节确切,所以我不会去编写该版本。

这将影响更改视图以及添加视图 - 如果您想将其限制为仅添加视图,则会变得更加困难。您必须覆盖管理员的add_view方法。

+0

非常感谢彼得! – 2014-09-03 18:57:31

相关问题