按字母顺序定义 Django 模型

Defining django models in an alphabetic order

我可以按字母顺序定义 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)

我希望 ChoiceQuestion 之前定义。简单重新排序后

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 的说法,解决方法会破坏 IDEs,因为 IDE 无法知道您是指文字字符串还是正在寻找 class.

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

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')

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

question = models.ForeignKey('Question')

而不是

question = models.ForeignKey(Question)

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