我有以下2种型号:
class Note(models.Model):
name= models.CharField(max_length=35)
class ActionItem(models.Model):
note = models.models.OneToOneField(Note, on_delete=models.CASCADE)
target = models.CharField(max_length=35)
category = models.ForeignKey(Category, blank=True, null=True, on_delete=models.CASCADE)
在其他模型中(基于某些条件),我会触发一个创建注释的实用函数:
def create_note(target=None, action=None):
note = Note(target=target, name=name).save()
transaction.on_commit(
ActionItem(note=note, target=target).save())
我收到以下错误:
null value in column "note_id" violates not-null constraint
DETAIL: Failing row contains (6, null).
如果我使用:
因此,我认为错误是由于save
不会返回任何内容而出现的。
我需要将Note作为FK传递给ActionItem,请确保已保存。
答案 0 :(得分:3)
模型的.save()
方法不返回任何内容,因此您的note
变量为None
,因此,创建ActionItem
对象的结果为{ {1}}供None
参考,因此会引发错误。
我们可以使用note
的{{1}}并返回对象来解决它:
Note.objects.create(..)
或者,我们可以先构造对象,然后.saves()
构造它:
def create_note(target=None, action=None):
note = Note.object.create(target=target, name=name)
transaction.on_commit(lambda: ActionItem.object.create(note=note, target=target))
答案 1 :(得分:2)
您可以使用创建功能代替保存功能
def create_note(target=None, action=None):
note = Note.objects.create(name=name)
actionItem = ActionItem.object.create(note=note, target=target)