Создание модели внутри модели django (предпочтения пользователя)

Я немного новичок в Django и пытаюсь создать способ, который позволит пользователям системы иметь предпочтения. Мне казалось, что лучший способ сделать это (простите, если я ошибаюсь) - это иметь дополнительную модель, (UserPreferences) и иметь отношения один-к-одному между каждым User и UserPreferences, однако я не могу заставить это работать.

По сути, я хочу сделать следующее: для каждого User, который создается, мне нужен связанный UserPreferences, который содержит значения предпочтений (в данном случае это булевы значения, указывающие, хочет ли пользователь, чтобы этот конкретный атрибут был публичным) для этого User.

Кто-нибудь видит, где я ошибаюсь?

class UserPreferences(models.Model):
    username = models.CharField(max_length=50)
    age = models.BooleanField(default=True)
    height = models.BooleanField(default=True)


class extendedUser(BaseUserManager):
    # required method for BaseUserManager
    def create_user(self, username, password, email, city, dob, height, weight, is_staff, is_superuser, is_admin):
        pref = UserPreferences.objects.create(username=username)
        email = self.normalize_email(email)
        user = self.model(
            username=username,
            email=email,
            dob=dob,
            city=city,
            height=height,
            weight=weight,
            preferences=pref,
            is_staff=is_staff,
            is_superuser=is_superuser,
            is_admin=is_admin,
        )
        user.set_password(password)
        user.save()
        return user

    def create_superuser(self, username, password, email, city, dob, height, weight):
        return self.create_user(username, password, email, city, dob, height, weight, True, True, True)


class User(AbstractUser):
    username = models.CharField(max_length=50, unique=True)
    password = models.CharField(max_length=200)
    email = models.EmailField(max_length=250)
    dob = models.DateField()
    city = models.CharField(max_length=50)
    height = models.FloatField()
    weight = models.FloatField()
    preferences = models.OneToOneField(UserPreferences, models.CASCADE)

    is_admin = models.BooleanField(default=False)
    is_superuser = models.BooleanField(default=False)
    is_staff = models.BooleanField(default=False)

    objects = extendedUser()

    USERNAME_FIELD = 'username'

    # # this refers to required fields for creating a superuser
    REQUIRED_FIELDS = ["city", "email", "dob", "height", "weight"]

Большое спасибо за уделенное время, Алекс

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