问题描述
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)
才能获得特定文章的星标。