Модель либо не установлена, либо является абстрактной - Django, Python - PullRequest
1 голос
/ 20 апреля 2020

при переносе кода ниже я получаю следующую ошибку ---- ОШИБКИ: users.UserStripe.user: (fields.E300) Поле определяет связь с моделью 'settings.AUTH_USER_MODEL', которая либо не установлена, или абстрактно. users.UserStripe.user: (fields.E307) Поле users.UserStripe.user было объявлено с ленивой ссылкой на 'settings.auth_user_model', но приложение 'settings' не установлено .---
Я понимаю, что это связано с тем, что у меня есть «пользователь» в классе полосы и профиля, но я не уверен, как остановить ошибку. Любое руководство будет оценено!

models.py - пользователи

import stripe

from django.db import models
from django.conf import settings
from django.contrib.auth.models import User


stripe.api_key = '****************' 

class UserStripe(models.Model):
    **user = models.OneToOneField('settings.AUTH_USER_MODEL', on_delete=models.CASCADE)**
    stripe_id = models.CharField(max_length=120)

    def __str__(self):
        return str(self.stripe_id)


class Profile(models.Model):
    **user = models.OneToOneField(User, on_delete=models.CASCADE)**
    image = models.ImageField(default='', upload_to='profile_pics')

    def __str__(self):
        return f'{self.user.username} Profile'

1 Ответ

1 голос
/ 20 апреля 2020

Не следует использовать 'settings.AUTH_USER_MODEL' в качестве строки литерал , поскольку тогда Django будет искать модель с именем AUTH_USER_MODEL в приложении settings. Но нет приложения для настройки и нет модели с таким именем.

Вы должны передать значение из settings.AUTH_USER_MODEL:

from django.db import models
from django.conf import settings

class UserStripe(models.Model):
    user = models.OneToOneField(
        <b>settings.AUTH_USER_MODEL</b>,
        on_delete=models.CASCADE
    )
    stripe_id = models.CharField(max_length=120)

    def __str__(self):
        return str(self.stripe_id)

class Profile(models.Model):
    user = models.OneToOneField(
        <b>settings.AUTH_USER_MODEL</b>,
        on_delete=models.CASCADE
    )
    image = models.ImageField(default='', upload_to='profile_pics')

    def __str__(self):
        return f'{self.user.username} Profile'

Примечание : обычно лучше использовать settings.AUTH_USER_MODEL [Django -doc] , чтобы обратиться к пользовательской модели, чем использовать User модель [Django -doc] напрямую. Для получения дополнительной информации вы можете увидеть , ссылающийся на User модель раздела документации .

...