【问题标题】:Django Model Field with Secondary Field带有辅助字段的 Django 模型字段
【发布时间】:2018-12-13 05:33:13
【问题描述】:

我正在尝试在 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',]

【问题讨论】:

    标签: python django django-models


    【解决方案1】:

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

    所以你可以有一个看起来像这样的类:

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

    这也意味着用户可以喜欢多种类型,而不仅仅是一种。

    【讨论】:

      猜你喜欢
      • 2012-11-27
      • 1970-01-01
      • 2021-10-19
      • 2012-05-17
      • 1970-01-01
      • 2013-02-03
      • 2020-12-23
      • 2012-05-13
      • 1970-01-01
      相关资源
      最近更新 更多