Показывать связанные поля в панели администратора 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]

Ссылка: https://stackoverflow.com/a/74233744/1388835

Вернуться на верх