Отображение поля из другой модели в админке django
Допустим, у меня есть две модели. Я хочу, чтобы поле subject в модели Program отображалось в UserProgramAdmin. Как лучше всего это сделать?
class Program(models.Model):
name = models.CharField(max_length=15, blank=False)
summary = models.CharField(max_length=200, blank=True)
subject = models.ManyToManyField(Subject, related_name='all_subjects')
is_active = models.BooleanField(default=True)
created_at = models.DateTimeField(auto_now_add=True, editable=False)
updated_at = models.DateTimeField(auto_now=True, editable=False)
def __str__(self) -> str:
return self.name
class UserProgram(models.Model):
user = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE,
)
program = models.ForeignKey(
Program,
on_delete=models.CASCADE,
)
is_active = models.BooleanField(default=True)
is_finish = models.BooleanField(default=False, editable=False)
/admin.py
class UserProgramAdmin(admin.ModelAdmin):
list_display = ('user', 'program' , 'is_active', 'is_finish')
Заранее спасибо
Лучшим способом сделать это было бы также показать subject в поле __str__ в Program следующим образом:
class Program(models.Model):
#Your other code
def __str__(self):
return f'{self.name} - {self.subject}'
Тогда тема Program появляется в админке UserProgram.
Вам следует определить метод на UserProgram и затем вызвать его в атрибуте UserProgramAdmin list_display
models.py
class UserProgram(models.Model):
#...model attributes
def get_subject(self):
subject = self.program.subject.all()
return subject
admin.py
class UserProjectAdmin(admin.ModelAdmin):
list_display = ('get_subject', 'attribute_to_display')