Django 外键和IntegrityError:id不能为NULL
这里是Django新手。我有两个这样的简单模型:Django 外键和IntegrityError:id不能为NULL,django,django-models,Django,Django Models,这里是Django新手。我有两个这样的简单模型: class Fluff(models.Model): # .... # some fields definitions class Something(models.Model): name = models.CharField(max_length=200) fluff = models.ForeignKey(Fluff) >>> s.name = 'Blah' >>> o
class Fluff(models.Model):
# ....
# some fields definitions
class Something(models.Model):
name = models.CharField(max_length=200)
fluff = models.ForeignKey(Fluff)
>>> s.name = 'Blah'
>>> obj = Fluff(...)
>>> obj.save()
>>> s.fluff = obj
>>> s.save()
syncdb
按预期运行,然后我转到shell测试:
>>> 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
不走运。这应该很琐碎,但我现在还不明白。任何帮助都将不胜感激。尝试这样做:
class Fluff(models.Model):
# ....
# some fields definitions
class Something(models.Model):
name = models.CharField(max_length=200)
fluff = models.ForeignKey(Fluff)
>>> s.name = 'Blah'
>>> obj = Fluff(...)
>>> obj.save()
>>> s.fluff = obj
>>> s.save()
好吧,那就行了。。。但这是惯用的做事方式吗?对我来说似乎很笨拙。特别是在我的场景中,我想生成一些
东西
s,并且只根据用户输入保存一些。我可以看到这会导致像s.fluff=s.fluff
这样的行,这样我就不会在s
中携带额外的变量……我只是认为它会起作用。在将对象指定给其他模型的字段之前,需要获取或创建对象。很容易理解代码中发生了什么,所以我认为这是一个很好的方法。真的,我不看模型系统,但我认为当你使用s.fluff=fluff(…)-数据库中该字段中设置的唯一id(整数),所以你不能保存它;这并不意味着我一定要喜欢它:)无论如何,谢谢你的时间,我会在接受你的答案之前稍等片刻,以防出现其他建议。