我可以按字母顺序定义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无法识别文字字符串或是否正在寻找类的问题。
答案 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')