Django管理字段。在关系领域获得价值

时间:2020-11-10 17:33:12

标签: python-3.x django django-models

Models.py

class Student(models.Model):
    first_name = models.CharField(max_length=255)

class Room(models.Model):
    room_name = models.CharField(max_length=20)
    student = models.OneToOneField(Student, on_delete=models.CASCADE)

Admin.py

class RoomAdmin(admin.ModelAdmin):
    model = Room
    fields = ('room_name', 'student__first_name',)

我需要在添加房间管理页面上显示字段“ first_name”。 因此,我将管理员设置为遵循源代码,但是却收到错误消息。

ERRORS:
<class 'building.admin.RoomAdmin'>: (admin.E108) The value of 'fields[1]' refers to 'student__first_name', which is not a callable, an attribute of 'RoomAdmin', or an attribute or method on 'building.Room'.

对此请多加指导或建议:)

1 个答案:

答案 0 :(得分:1)

如错误所示, student__first_name 不是 Room 类的字段。在这种情况下,您可以将可调用函数定义为

class RoomAdmin(admin.ModelAdmin):
    model = Room
    fields = ('room_name', 'first_name',)

    def first_name(self, room):
        return room.student.first_name