Django admin : Как показать модель как inline внутри другой модели, которая косвенно связана с ней

У меня есть модели с именами 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)

Мне нужно показать устройство пользователя на странице подробной информации о пользователе в панели администратора как inline.

Django Error admin.E202 'userdevice' has no ForeignKey to 'accounts.user'

Получаю эту ошибку. Любая помощь будет очень признательна.

Вам необходимо связать модель User с моделью UserDevice.

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]

Теперь в разделе Сведения о пользователе есть информация об устройстве. Дополнительная информация

Вернуться на верх