按字母顺序定义django模型

时间:2015-06-04 13:06:12

标签: django python-3.x python-3.4

我可以按字母顺序定义django模型吗?

取自django tutorial的模型:

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)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

我希望在Choice之前定义Question。简单重新排序后

class Choice(models.Models):
    question = models.ForeignKey(Question)
    question = models.ForeignKey(Question)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)


class Question(models.Models):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')

失败,因为在告诉翻译之前我需要Question

添加简单的空

class Choise(models.Model): pass
class Question(models.Model): pass

导致django尖叫但仍然无法python manage.py makemigrations polls

是否有按字母顺序定义模型的黑客攻击?

或者我应该放弃这个想法,只是从完全不同的东西定义到与一切相关的东西?

注意: 根据Sayse的说法,解决方案中的IDE可以解决IDE无法识别文字字符串或是否正在寻找类的问题。

2 个答案:

答案 0 :(得分:4)

如果需要在尚未定义的模型上创建关系,可以使用模型的名称,而不是模型对象本身:

question = models.ForeignKey('Question')

而不是

question = models.ForeignKey(Question)

来自https://docs.djangoproject.com/en/1.8/ref/models/fields/#django.db.models.ForeignKey

答案 1 :(得分:3)

您可以使用引号引用尚未声明的模型:

class Choice(models.Models):
    question = models.ForeignKey('Question')
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)


class Question(models.Models):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')