Django - Как получить объект на другой модели приложения без прямой связи в родительской модели?
У меня есть Profile model
, Award model
как дочерние элементы модели Profile [которая принимает другие детали награды, такие как детали достижения], и List_of_awards model
как дочерние элементы модели Award [которая принимает список наград и подсчет того, сколько профилей имеет конкретную награду].
Award model
находится в строке Profile model
с использованием Foreignkey
и List_of_awards model
как Foreignkey field
в Award model
для выбора наград.
Я пытаюсь сделать следующее: отобразить List_of_awards
в Profile model
.
Идея возникла, когда я смог отобразить List_of_awards
в list_display
в Award model', so, I was trying to link
List_of_awardsin the
Profile`, который не имеет прямой связи.
class Profile(models.Model):
first_name = models.CharField(verbose_name=_('First Name'), max_length=255, null=True, blank=True, )
middle_name = models.CharField(verbose_name=_('Middle Name'), max_length=255, null=True, blank=True)
last_name = models.CharField(verbose_name=_('Last Name'), max_length=255, null=True, blank=True)
....
class Award(models.Model):
list_of_award = models.ForeignKey('system_settings.Ribbon', related_name='awards_ad_ribbon', on_delete=models.DO_NOTHING, verbose_name=_('Type of Award'), blank=True, null=True)
achievement = models.TextField(verbose_name=_('Achievement'))
profile = models.ForeignKey('reservist_profile.Profile', related_name='awards_ad_profile', verbose_name=_('Profile'), on_delete=models.DO_NOTHING, blank=True, null=True)
def image_tag(self):
from django.utils.html import format_html
return format_html('<img src="/static/media/%s" title="" width="75" /> %s' % (self.list_of_award.image,self.list_of_award.award))
image_tag.short_description = 'Award'
class Ribbon(models.Model):
award = models.CharField(verbose_name=_('Award'), max_length=255, null=True, blank=True)
award_desc = models.TextField(verbose_name=_('Description'), max_length=255, null=True, blank=True)
image = models.ImageField(verbose_name = _('Image'), upload_to = award_image_location, blank = True, null = True)
class Meta:
verbose_name = _('List of awards')
verbose_name_plural = _('List of awards')
def __str__(self):
return '%s' % (self.award)
def image_tag(self):
return format_html('<img src="/static/media/%s" width="75" />' % (self.image))
image_tag.short_description = 'Award Image'
Итак, это то, что у меня есть на данный момент, другие функции приходят через исследование, но этот конкретный сценарий, я понятия не имею, что такое ключевое слово поиска, поэтому я извиняюсь, если это уже спрашивал кто-то. спасибо.
Вы можете попробовать следующим образом:
class ProfileAdmin(admin.ModelAdmin):
list_display = ('first_name',... 'list_of_awards')
@admin.display(description='Awards')
def list_of_awards(self, obj):
return ",".join([k.list_of_award.award for k in obj.awards_ad_profile.all()]
Больше информации можно найти в документации.