Django Admin 自定义外键选择框
Posted
技术标签:
【中文标题】Django Admin 自定义外键选择框【英文标题】:Django Admin custom foreign key select box 【发布时间】:2020-01-10 05:41:12 【问题描述】:我想自定义 Django 管理员选择框并在图片标题旁边的选择框中显示缩略图
我有一个名为 Image 的类和另一个名为 News 的类,它们有一个 Image 的外键。
注意:我使用 Django jet 作为管理模板。
class Image(models.Model):
alternate = models.CharField(
verbose_name=_('Alternate'),
max_length=255,
null=True,
blank=True
)
title = models.CharField(
verbose_name=_('Title'),
max_length=255,
null=True,
blank=True
)
artist = models.ManyToManyField(
'Artist',
verbose_name=_('Artist'),
blank=True
)
image = models.ImageField()
def __str__(self):
return "() ".format(self.pk, self.title)
class Meta:
verbose_name = _('Image Attachment')
verbose_name_plural = _('Image Attachments')
@staticmethod
def autocomplete_search_fields():
return 'title',
class News(BaseModel):
title = models.CharField(
verbose_name=_('Title'),
max_length=255,
null=True,
blank=True
)
summery = RichTextField(
verbose_name=_('Summery'),
null=True,
blank=True,
)
main_image = models.ForeignKey(
Image,
verbose_name=_('Main Image'),
on_delete=models.SET_NULL,
null=True,
blank=True,
related_name='images'
)
现在,当我想添加新闻时,我想在 Django 管理中的选项中显示图像的缩略图。
现在我的选择框是这样的
【问题讨论】:
【参考方案1】:您需要创建一个继承自Select 的自定义小部件,看起来最重要的部分是将option_template_name
设置为您创建的用于显示图像的模板。由于您使用的不是基本的 Django Admin,因此您可能需要考虑扩展该库中的小部件。
类似的东西:
class SelectWithImage(Select):
...
option_template_name = 'myapp/forms/widgets/select_option_with_image.html'
...
然后按照here 的描述在你的 admin.py 中为 News 模型调整管理员 formfield_overrides
,然后你就可以开始了!
此步骤将如下所示:
from django.contrib import admin
from django.db import models
# Import our custom widget and our model from where they're defined
from myapp.models import News
from myapp.widgets import SelectWithImage
class NewsAdmin(admin.ModelAdmin):
formfield_overrides =
models.ForeignKey: 'widget': SelectWithImage,
【讨论】:
感谢您的重播。在选择中,我只有__str__
和一个对象的 id。如何访问对象的其他功能。默认模板:<option value=" widget.value|stringformat:'s' "% include "django/forms/widgets/attrs.html" %> widget.label </option>
然后您需要进一步覆盖 ChoiceWidget 类,很可能是 create_option
github.com/django/django/blob/…以上是关于Django Admin 自定义外键选择框的主要内容,如果未能解决你的问题,请参考以下文章