使用django1.11和一个postgreSQL数据库(刚从sqlite切换过来,以前没有这个问题)
所以我有3个模型:
模型.py
class Person(models.Model):
is_parent = models.BooleanField()
class VideoGamePurchase(models.Model):
bought_by = models.ForeignKey(Person)
after_homework = models.OneToOneField(HomeWork, OPTIONS???)
class HomeWork(models.Model):
done_by = models.ForeignKey(Person)
content = models.CharField(blablaba)
因此,我尝试实现的逻辑是,如果Person.is_parent
是True
,那么可以为after_homework
创建一个VideoGamePurchase
实例,该实例的字段为空或为空。但是,如果Person.is_parent
是False
,我希望这个字段成为唯一的HomeWork
对象的主键。在
我找不到实现这一目标的正确选择:
如果我没有primary_key=True
,则makemigrations失败:
所以我想我必须要primary_key=True
。但我似乎不能拥有null=True
或{
有没有办法让postgreSQL的OneToOneField
可选地为空?在
有没有其他/更简单的方法来实现这种逻辑?在
谢谢你的帮助!在
如果希望}。在
after_homework
字段是可选的,那么应该使用null=True
和{您不希望}模型的主键字段,如果该字段是可选的,那么这就没有意义了。在
primary_key=True
用于after_homework
-这会使after_homework
成为{看起来您的迁移被搞砸了,因为您之前已经为}。这一次,迁移将自动为
after_homework
字段设置了primary_key=True
。最简单的修复方法是从一个新的数据库开始,删除该应用程序的迁移,然后重新运行makemigrations
和{VideoGamePurchase
模型创建一个主键字段id
。在相关问题 更多 >
编程相关推荐