0

我有这样的模型:

from django.db import models

class Article (models.Model):
    author = models.ForeignKey('Users.User')
    title = models.CharField()
    text = models.TextField()

    stars = [
        models.IntegerField(), # 0 stars
        models.IntegerField(), # 1 stars
        models.IntegerField(), # 2 stars
        models.IntegerField(), # 3 stars
        models.IntegerField(), # 4 stars
        models.IntegerField(), # 5 stars
    ]

但问题是星星字段不会在 000x_initials.py 中被识别。
我必须做什么?

我想像这样使用它:

if request.method == 'POST':
    post_data = request.post
    star = int(post_data['star'])
    article.stars[star] += 1
    article.save()
4

2 回答 2

1

如果你使用 POSTGRESQL 作为你的 DBMS,你可以使用 ArrayField:

from django.contrib.postgres.fields import ArrayField

在您的模型上:

stars = ArrayField(models.IntegerField(), size=6)

这将创建一个 6 长度的数组,您还可以创建多维数组。

其他方式尝试创建您的自定义字段。

于 2020-09-09T07:47:19.753 回答
0

首先,如果您想存储星星,将其设置为单个整数字段不是更好吗?用户可以根据用户选择存储 1,2,...5,甚至更好,只存储 5 个布尔字段. 无论如何,回答您的问题,您可以创建另一个具有该模型的外键的模型,如下所示:

class Article (models.Model):
    author = models.ForeignKey('Users.User')
    title = models.CharField()
    text = models.TextField()

class Stars (models.Model):
    star = models.IntegerField() #I would recommend boolean field instead
    article = models.ForeignKey(Article, on_delete=models.CASCADE)

这样你就可以有很多与一篇文章相关的星星。您必须在视图中以不同的方式处理它,例如Stars.objects.filter(article=article)为特定文章获取星标。

于 2020-09-09T07:46:16.993 回答