2
Django新手在这里。我有两个简单的模式是这样的:外键和IntegrityError:ID可能不是NULL
class Fluff(models.Model):
# ....
# some fields definitions
class Something(models.Model):
name = models.CharField(max_length=200)
fluff = models.ForeignKey(Fluff)
syncdb
去如预期,然后我去了壳测试的东西:
>>> s = Something()
>>> s.name = 'Blah'
>>> s.fluff = Fluff(...)
>>> s.save()
Traceback (most recent call last): # traceback skipped for brevity
IntegrityError: app_something.fluff_id may not be NULL
我希望Django的做它的魔力,弄清楚fluff
是没有保存,然后在保存之前保存s
。这并没有发生,但没关系,我可以节省fluff
我自己,让我们再试一次:
>>> s = Something()
>>> s.name = 'Blah'
>>> s.fluff = Fluff(...)
>>> s.fluff.save()
>>> s.save()
Traceback (most recent call last): # traceback skipped for brevity
IntegrityError: app_something.fluff_id may not be NULL
没有运气。这应该是微不足道的,但我目前无法弄清楚。任何帮助,将不胜感激。
OK,那工作......但是这是做事的习惯呢?似乎对我很笨拙。特别是因为在我的场景中,我想生成一些'Something's,并且只根据用户输入保存一些。我可以看到,导致像's.fluff = s.fluff'这样的行,所以我不会随着's'携带额外的变量... – sbk
我只是认为它会起作用。在将其分配给其他模型的字段之前,您需要获取或创建对象。理解代码中发生的事情非常容易,所以我认为这是很好的方法。真的,我不看模型系统,但我想当你使用s.fluff = Fluff(...) - 只有在数据库(整数)的字段中设置的id,所以你可以保存它。 – Dracontis
是的,我可以想象为什么你的代码工作,而我的代码不工作;这并不意味着我必须喜欢它:)无论如何,感谢您的时间,我会稍等一会才接受您的答案,以防万一其他建议弹出。 – sbk