微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在Django模型中具有字段列表?

如何解决如何在Django模型中具有字段列表?

我有一个这样的模型:

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

解决方法

如果您将POSTGRESQL用作DBMS,则可以使用ArrayField:

from django.contrib.postgres.fields import ArrayField

在您的模型上:

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

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

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

,

首先,如果要存储星号,将其设置为单个整数字段更好,并且用户可以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)才能获得特定文章的星标。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。