具有次要字段的Django模型字段 [英] Django Model Field with Secondary Field

查看:41
本文介绍了具有次要字段的Django模型字段的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在Django中创建一个用户注册表单,该表单允许一个主字段以及一个关联的整数字段。我需要每个用户都能够选择一种类型(用于电影),然后选择他们喜欢该类型的百分比(0-100)。我已经将百分比创建为一个单独的模型,但是我需要将其与每个用户的每个流派相关联。如何将每个用户的流派与特定的喜欢百分比相关联?现在,我只有一个类型列表,无法选择每种类型的百分比。

I am trying to create a user sign up form in Django that allows for a primary field with an associated integer field. I need each user to be able to select a genre (for movies), and then the percentage (0-100) they like that genre. I have created the percentage as a separate model, but I need it to be associated with each genre per user. How can I associate each user's genres with a specific "like" percentage? Right now, I just have a box of the genre list, with no way to select the percentage like for each genre.

#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',]


推荐答案

一个很好的方法是使用直通模型,将用户与流派联系起来,跟踪用户在该模型中而不是流派模型中喜欢该流派的程度,因为喜欢百分比取决于连接

A good way to do this could be to use a through model linking the user with the genre, keeping track of how much the user likes that genre within that model instead of within the Genre model since the "like" percent depends on the connection with the user.

所以您可以创建一个类似于以下内容的类:

So you could have a class that looks something like:

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()

此还将意味着用户可以喜欢多种类型,而不只是一种。

This will also mean that a user can like several genres instead of having just one.

这篇关于具有次要字段的Django模型字段的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆