Модельное поле Джанго со вторичным полем - PullRequest
0 голосов
/ 13 декабря 2018

Я пытаюсь создать форму регистрации пользователя в Django, которая допускает первичное поле со связанным целочисленным полем.Мне нужно, чтобы каждый пользователь мог выбрать жанр (для фильмов), а затем процент (0-100), который им нравится в этом жанре.Я создал процент как отдельную модель, но мне нужно, чтобы он был связан с каждым жанром для каждого пользователя.Как связать жанры каждого пользователя с определенным процентом «лайков»?Прямо сейчас у меня есть поле со списком жанров, и я не могу выбрать процент для каждого жанра.

#app/models.py
class Length(models.Model):
    length = models.IntegerField(default="Default")

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

class Genre(models.Model):
    title = models.CharField(max_length=40, help_text="Enter genre name", default="Default")
    like = models.ManyToManyField(Like, help_text='Genre like percent', default="1")

    def __str__(self):
        return self.title


#users/models.py
import stuff

class User(AbstractUser):

    first_name = models.CharField(max_length = 30, blank = True)
    last_name = models.CharField(max_length = 30, blank = True)
    email = models.EmailField(unique = True)
    city = models.CharField(max_length = 30, blank = True, default='Default Town')
    state = models.CharField(max_length = 2, default='CA')
    summary = models.CharField(max_length=250, default='Default summary')
    genres = models.ManyToManyField(Genre, help_text='Select each genre.', default='default', related_name='genre_model')

    def __str__(self):
        return self.email

#users/forms.py
class CustomUserCreationForm(UserCreationForm):

class Meta(UserCreationForm):
    model = User
    fields = ['username',
                'email',
                'first_name',
                'last_name',
                'city',
                'state',
                'summary',
                'genres',]

1 Ответ

0 голосов
/ 13 декабря 2018

Хорошим способом сделать это может быть использование сквозной модели, связывающей пользователя с жанром, отслеживание того, насколько пользователю нравится этот жанр в этой модели, а не в модели жанра, поскольку процент «нравится» зависит отсоединение с пользователем.

Таким образом, у вас может быть класс, который будет выглядеть примерно так:

class Like(models.Model): # name this model something better than "Like"
    user = models.ForeignKey(User, related_name="liked_genres")
    genre = models.ForeignKey(Genre, related_name="user_ratings")
    rating = models.IntegerField()

Это также будет означать, что пользователю могут понравиться несколько жанров вместо одного.

...