Показывать связанные поля в панели администратора django
У меня есть 3 модели django. Модель Requirement имеет свои собственные поля. Модели RequirementImage и RequirementDOc имеют Requirement в качестве внешнего ключа, которые используются для загрузки нескольких изображений и нескольких документов. В админке я хочу показать требование вместе с изображениями и документами, связанными с требованием. Как я могу показать это в панели администратора. Я могу показать только требование, но мне нужно показать прикрепленные изображения и документы. Ниже приведен точный код моделей.
class Requirement(models.Model):
name = models.CharField(max_length=100)
description = models.CharField(max_length = 5000)
mobile = models.CharField(max_length=15, null=True, blank=True)
email = models.EmailField(null=True, blank=True)
city = models.CharField(max_length=100)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class RequirementImage(models.Model):
requirement = models.ForeignKey('Requirement', on_delete=models.CASCADE)
image = models.ImageField(null=True, blank=True, validators=[
FileMimeValidator()
], upload_to=settings.MEDIA_RELATIVE_ROOT + "requirements/images")
class RequirementDoc(models.Model):
requirement = models.ForeignKey('Requirement', on_delete=models.CASCADE)
requirement_file = models.FileField(null=True, blank=True, upload_to=settings.MEDIA_RELATIVE_ROOT + "requirements/docs")
Версия Python - 3.7.12, а версия django - 3.2.14
в models.py
from django.utils.safestring import mark_safe
class RequirementImage(models.Model):
requirement = models.ForeignKey('Requirement', on_delete=models.CASCADE)
image = models.ImageField(null=True, blank=True, validators=[
FileMimeValidator()
], upload_to=settings.MEDIA_RELATIVE_ROOT + "requirements/images")
def photo_tag(self):
return mark_safe('<a href="/your_path/{0}"><img src="/your_path/{0}"></a>'.format(self.image))
photo_tag.short_description = 'Photo of prescription'
photo_tag.allow_tags = True
и когда вы хотите использовать его в admin
list_display = ('get_photo')
def get_photo(self, obj):
return obj.photo.photo_tag()
get_photo.short_description = 'Photo of prescription'
Это правильный ответ. Мы должны использовать TabularInline.
class RequirementImageInline(admin.TabularInline):
model = RequirementImage
fields = ['image']
extra = 1
class RequirementDocInline(admin.TabularInline):
model = RequirementDoc
fields = ['requirement_file']
extra = 1
class RequirementAdmin(admin.ModelAdmin):
inlines = [RequirementImageInline,RequirementDocInline]