Django Admin TabularInline - 通过OneToOne关系获取外键

时间:2017-06-18 17:23:26

标签: python django inline foreign-key-relationship one-to-one

如下所示,我想在另一个(事件)的管理员更改视图中以TabularInline显示一个模型(考勤)。但是,出勤没有指向事件的直接ForeignKey。相反,它与注册具有OneToOne关系,后者又指向事件。有任何简单的方法可以达到这个目的吗?

从代码中可以看出,我尝试使用方法访问事件,并将其作为 fk_name 传递给TabularInline类,但它引发了错误说“'myapp.Attendance'没有名为'get_fk'的字段

的myapp / models.py

from django.db import models

class Event(models.Model):
    ...

class Registration(models.Model):
    event = models.ForeignKey(Event, on_delete=models.CASCADE)
    ...

class Attendance(models.Model):
    registration = models.OneToOneField(Registration, primary_key=True, one_delete=models.CASCADE)
    ...

    def get_fk(self): 
        return self.registration.event

的myapp / admin.py

from django.contrib import admin

class AttendanceInline(admin.TabularInline):
    model = Attendance
    fk_name = 'get_fk'

class EventAdmin(admin.ModelAdmin):
    inlines = [AttendanceInline]

我目前的解决方法是将另一个“事件”ForeignKey添加到出勤,但这似乎是多余的,因为相同的数据已经存储在“注册”中。

如果有人可以提供帮助,请欣赏它!

1 个答案:

答案 0 :(得分:0)

fk_name应该是根据文档而不是模型的任何属性具有Foreignkey关系的字段名称。

https://docs.djangoproject.com/en/1.11/ref/contrib/admin/#django.contrib.admin.InlineModelAdmin.fk_name