在Django中创建一个投票模型通常涉及到设计两个主要的模型:一个是Question
(问题),另一个是Choice
(选项)。每个Question
可以有多个Choice
。下面是一个基本的投票模型设计示例:
from django.db import models
class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
class Choice(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
如果你想要更改你的模型,比如添加新的字段或者改变模型的关系,你可以按照以下步骤进行:
假设你想给Question
模型添加一个新的字段question_type
,用来区分问题的类型(选择题、填空题等):
class Question(models.Model):
QUESTION_TYPES = (
('choice', '选择题'),
('fill_in', '填空题'),
)
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
question_type = models.CharField(max_length=10, choices=QUESTION_TYPES)
如果你想要改变Choice
和Question
之间的关系,比如从多对一(ForeignKey
)改为多对多(ManyToManyField
),你可以这样做:
class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
class Choice(models.Model):
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
class QuestionChoice(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE)
choice = models.ForeignKey(Choice, on_delete=models.CASCADE)
在这个例子中,我们创建了一个新的模型QuestionChoice
来表示Question
和Choice
之间的多对多关系。
更改模型后,你需要进行数据库迁移来更新数据库结构:
python manage.py makemigrations
python manage.py migrate
如果你在更改模型后遇到问题,比如迁移失败或者数据丢失,这里有一些可能的解决方法:
参考链接:
在进行任何数据库结构更改之前,请确保你了解这些更改的影响,并在生产环境中进行充分的测试。
领取专属 10元无门槛券
手把手带您无忧上云