Django 外键和IntegrityError:id不能为NULL

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

这里是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'
>>> 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(整数),所以你不能保存它;这并不意味着我一定要喜欢它:)无论如何,谢谢你的时间,我会在接受你的答案之前稍等片刻,以防出现其他建议。