【问题标题】:<XXX> needs to have a value for field xxx before this many-to-many relationship can be used<XXX> 需要有字段 xxx 的值才能使用这种多对多关系
【发布时间】:2017-12-24 12:38:58
【问题描述】:

我目前有以下3个型号

class modelToolName(models.Model):
    tool_name = models.CharField(max_length=250,unique=True)

class modelBodyPart(models.Model):
    part_name = models.CharField(max_length=128,unique=True)

class modelNormalBodyPartResult(models.Model):
    body_part = models.ForeignKey(modelBodyPart, default=None)
    tool_name = models.ManyToManyField(modelToolName, default=None, blank=True)
    result = models.TextField(blank=True, null=True)

现在我正在尝试以这种方式将值插入modelNormalBodyPartResult

result="xxxx"
bodpart = modelBodyPart.objects.get(part_name="xxx") #--->returns object fine
toolqset = modelToolName.objects.get(tool_name="xxx")#--->returns object fine
modelNormalBodyPartResult.objects.create(body_part=bodpart,tool_name = toolqset,result=result) --->error

我得到了错误

<modelNormalBodyPartResult: modelNormalBodyPartResult object> needs to have a value for field "modelnormalbodypartresult" before this many-to-many relationship can be used.

我查看了this 的帖子,但仍然无法弄清楚问题所在,任何有关这方面的建议将不胜感激。

【问题讨论】:

  • 你在插入值时定义了modelNormalBodyPartResult的新obj吗?
  • 不,我总是像这样创建一个新对象 modelobject.objects.create(...)
  • 您确定要在那里进行多对多吗?
  • @DanielRoseman 是的,原因是modelToolName 的一个实例可以与多个modelNormalBodyPartResult 关联,同时modelNormalBodyPartResult 可以有多个与modelToolName 实例关联的条目跨度>

标签: django many-to-many django-orm


【解决方案1】:

你必须先创建一个对象,然后将ManyToMany相关的对象添加到其中,

result="xxxx"
bodpart = modelBodyPart.objects.get(part_name="xxx")
toolqset = modelToolName.objects.get(tool_name="xxx")
item = modelNormalBodyPartResult.objects.create(body_part=bodpart,result=result)
item.tool_name.add(toolqset)
item.save()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-08
    • 1970-01-01
    相关资源
    最近更新 更多