何时在Django中使用makemigrations

时间:2016-03-11 17:19:51

标签: python django

我是Django的新手。我正在关注Django Docs的教程。文件提到:

  

通过运行makemigrations,你告诉Django你已经做了一些   改变你的模型(在这种情况下,你做了新的)和那   您希望将更改存储为迁移

我不明白这一行。在教程中,只有当他们创建了两个,即问题&时才会运行makemigrationspolls/models.py中的选择。但是,当他们在子类中修改(或我会说重新实施)makemigrations方法时,他们没有运行__str__()问题& ;的选择即可。此外,他们在选择 子类中添加了自定义方法(或操作),即was_published_recently()

我猜他们应该在添加这些方法之后运行makemigrations?

from __future__ import unicode_literals
from django.db import models
from django.utils.encoding import python_2_unicode_compatible
import datetime

# Create your models here.

@python_2_unicode_compatible   # Only if you need to support Python 2
class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('published date')

    def __str__(self):
        return self.question_text

    def was_published_recently(self):
        return self.pub_date >= timezone.now() - datetime.timedelta(days=1)


@python_2_unicode_compatible   # Only if you need to support Python 2
class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

    def __str__(self):
        return self.choice_text

1 个答案:

答案 0 :(得分:2)

迁移描述了必须对基础数据库中的定义所做的更改,但Django模型中的所有内容都不会直接对应于数据库。覆盖__str__方法并添加was_published_recently方法不需要更改任何数据库。

添加新类并不是您可能需要运行迁移的唯一时间:如果您希望以不同颜色编写问题,可以将其添加到Question模型中:

color = models.CharField(max_length=6)  # font color hex code

此更改需要更改数据库架构,因此需要迁移。