在下面的代码中,必须在Day之后声明TimePeriod。类似地,TimePeriod不能在Day方法'get_all_time_periods'中引用。
是否有针对此限制的解决方法(此外,这个排序限制又需要进一步使用Google搜索)?
我有一个更复杂的场景,许多类引用Day,我想在Day编写一个方法来收集所有这些模型。但是,必须在引用它的所有类之前声明Day。这些场景中的最佳做法是什么?在视图中写这个似乎是错误的,我不喜欢为此目的创建实用方法的想法。
提前致谢,
class Day(models.Model):
title = models.CharField(max_length=255, unique=True)
def get_all_time_periods(self):
pass
#can't reference time period here
class TimePeriod(models.Model):
day = models.ForeignKey(Day, null=True, blank=True)
答案 0 :(得分:3)
您可以将模型名称作为字符串传递给models.ForeignKey
:
class TimePeriod(models.Model):
day = models.ForeignKey("Day", null=True, blank=True)
然后在引用之前无需定义class Day
。
答案 1 :(得分:0)
akxlr回答是对的,只需使用models.ForeignKey("another_model", null=True, blank=True)
但是当你有非常复杂的模型并且需要添加像 get_all_time_periods 这样的方法时,你可以使用它:
Day.get_all_time_periods = property(lambda self: filter(lambda t: self == t.day, TimePeriod.objects.all()))
您可以自定义此属性以获取正确的数据,这只是一个示例