编写Python类时的约束

时间:2017-04-14 11:22:15

标签: python django

我使用Python 3.5.2和使用SQLite的Django 1.11

我遇到的情况是,我想用某个名称命名我的模型 Class ,但是不同的名称我在manage中得到不同的结果。关于 ForeignKeys

的py迁移

shell的例子:

modules.py

from django.db import models


class Place(models.Model):
    question_text = models.CharField(max_length=200)


class Choice(models.Model):
    question = models.ForeignKey(Place, on_delete=models.CASCADE)

运行python3 manage.py makemigrations post

Migrations for 'post':
  post/migrations/0001_initial.py   
    - Create model Choice
    - Create model Place
    - Add field question to choice'

将类Cho重命名为示例"评级":

from django.db import models


class Place(models.Model):
    question_text = models.CharField(max_length=200)


class Rating(models.Model):
    question = models.ForeignKey(Place, on_delete=models.CASCADE)

迁移尝试的输出:

Migrations for 'post':
  post/migrations/0001_initial.py
    - Create model Place
    - Create model Rating

您可能会注意到外键实现消失了。我到处都检查了三次。试过新项目。坚持了几天。是否有任何类命名限制或某种错误?

祝你度过愉快的假期,谢谢。

1 个答案:

答案 0 :(得分:3)

这不是错误,在这两种情况下都会创建外键。

在第一种情况下,首先创建Choice模型,并且由于Place尚不存在,因此在创建模型时无法创建外键。因此,稍后在创建Place模型后的单独步骤中添加它。

在第二种情况下,首先创建Place模型,因此可以在CreateModel的{​​{1}}操作中创建外键。

理想情况下,两种情况都会尽可能产生第二个输出,因为它包含的步骤较少,但优化尚未实现。

相关问题