У меня есть две модели, Tender
и Status
, которые имеют отношение «многие ко многим» с промежуточной моделью TenderStatus
. TenderStatus
имеет дополнительное поле даты, которое обозначает дату применения каждого статуса. Я хочу показать все статусы для каждого тендера в list_display. Я понимаю, что мне нужно создать вызываемый объект в моем классе TenderAdmin
для включения в list_display, и, хотя я могу перечислить статусы, у меня возникают проблемы с доступом к полю даты в промежуточной модели.
Вот сокращенная версия моего файла models.py :
class Tender(models.Model):
name = models.CharField(
max_length=255,
null=False
)
tender_status = models.ManyToManyField(
'Status',
through='TenderStatus',
related_name='tender_status'
)
class Status(models.Model):
status = models.CharField(
max_length=50,
null=False
)
class TenderStatus(models.Model):
tender = models.ForeignKey('Tender', on_delete=models.DO_NOTHING, blank=True, null=False)
status = models.ForeignKey('Status', on_delete=models.DO_NOTHING, null=False)
date = models.DateField(blank=True, null=False)
А вот сокращенный admin.py - обратите внимание на вызываемый status_list
, он работает, но в нем нет даты. Все попытки, которые я сделал для доступа к дате, не сработали.
class TenderAdmin(admin.ModelAdmin, ExportCsvMixin):
list_display = ['name', 'status_list']
def status_list(self, obj):
return [x.status for x in obj.tender_status.all()]
status_list.allow_tags = True
Я пробовал это, но он не может найти дату и возвращает ошибку 500:
def status_list(self, obj):
return [str(x.date) + ': ' + x.status for x in obj.tender_status.all()]
Любая помощь в поиске правильного способа написания этой функции status_list, чтобы она обращалась к дате, была бы очень признательна!