Django admin:如何在另一个间接相关的模型中显示内联模型
我有几个模型,分别叫做用户(user)、认证令牌(authtoken)和用户设备(userdevice)。
class User(LifecycleModelMixin, AbstractUser): email = models.EmailField(unique=True) slug = models.SlugField(max_length=100, unique=True, blank=False, null=True) class AuthToken(models.Model): objects = AuthTokenManager() digest = models.CharField( max_length=CONSTANTS.DIGEST_LENGTH, primary_key=True) token_key = models.CharField( max_length=CONSTANTS.TOKEN_KEY_LENGTH, db_index=True) user = models.ForeignKey(User, null=False, blank=False, related_name='auth_token_set', on_delete=models.CASCADE) created = models.DateTimeField(auto_now_add=True) expiry = models.DateTimeField(null=True, blank=True) class UserDevice(models.Model): token = models.OneToOneField(AuthToken, on_delete=models.CASCADE, related_name="auth_token") device_type = models.CharField(max_length=100, choices=DevicesChoices.choices) access_type = models.CharField(max_length=100, choices=AccessChoices.choices) device_brand = models.CharField(max_length=100, null=True, blank=True)
我想在管理面板的用户详情页面里,把用户设备的信息显示出来,并且希望是直接显示在同一行。
但是出现了一个错误:Django错误 admin.E202,提示'userdevice'没有指向'accounts.user'的外键。
我遇到了这个错误。任何帮助都非常感谢。
1 个回答
0
你需要把用户模型(User model)和用户设备模型(UserDevice model)连接起来。
在models.py文件中,你会进行相关的设置。
class UserDevice(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
token = models.OneToOneField(AuthToken, on_delete=models.CASCADE, related_name="auth_token")
device_type = models.CharField(max_length=100, choices=DevicesChoices.choices)
access_type = models.CharField(max_length=100, choices=AccessChoices.choices)
device_brand = models.CharField(max_length=100, null=True, blank=True
在admin.py文件中,你也需要做一些配置。
from django.contrib import admin
class UserDeviceInline(admin.TabularInline):
model = UserDevice
extra = 0
@admin.register(User)
class UserAdmin(admin.ModelAdmin):
list_display = ['email', 'slug']
inlines = [UserDeviceInline]
现在在用户详情中,你可以看到设备的信息了。了解更多信息