我有“文章”和“模块”应用。在“模块”应用程序中,有一个模型必须显示文章,它们由“模块”中的ManyToManyField链接。
我的问题是如何在Django admin的select字段中修改文本值?默认情况下,它显示文章的名称,但我也想要文章模型中的一些信息。 有没有一种简单的方法可以做到这一点?
答案 0 :(得分:1)
根据您的Python版本,您可能要覆盖模型的__str__
字段(Python 3)或模型的__unicode__
字段(Python 2)以更改它们的显示方式管理员。
答案 1 :(得分:0)
Django Admin选择菜单使用模型实例的unicode值来填充菜单之类的内容。无论您的__unicode__
方法返回什么,都应该是选择菜单中的内容。
答案 2 :(得分:0)
你的问题很模糊,但我只是假设,你有Article
模型,其中包含许多字段,例如Something
模型
class Something(models.Model):
name = models.CharField(max_length=10)
#...
def __unicode__(self):
return u"{} whatever text you want".format(self.name)
class Article(models.Model):
title = models.CharField(max_length=120)
something = models.ManyToMany(Something)
def __unicode__(self):
return u"{}".format(self.title)
在管理员中,您会看到多个选择框中每个对象的<object_name> whatever text you want
,这是您想要的吗?
答案 3 :(得分:0)
如果要在管理字段中执行此操作,则可以使用formfield_for_manytomany
。在骨架形式下,它可能看起来像这样:
def formfield_for_manytomany(self, db_field, request=None, **kwargs):
field = super().formfield_for_manytomany(db_field, request, **kwargs)
if db_field.name in ['the_field_you_want']:
# This line answers the question.
field.label_from_instance = lambda obj: "{}".format(obj.what_you_want_to_see)
# The lines below included so folks know you can
# also modify queryset and widget in this method
field.widget = forms.CheckboxSelectMultiple() # checkboxes
field.queryset = field.queryset.filter(some_field = something)
return field #important
这来自this answer,它实现了相同的目标,但是使用Form
类而不是formfield_for_manytomany
。