我正在尝试在同一模型中的self上创建一个M2M值。我可以很好地更新name字段。然而,当我更新M2M (超标签)字段时,我一直得到TypeError。
models.py
class Tag(models.Model):
name = models.CharField("Name", max_length=5000, blank=True)
supertag = models.ManyToManyField('self', blank=True)serializers.py
supe = tag.all()
print(supe)
# returns [<Tag: XYZ>, <Tag: 123>]
for y in supe:
# import pdb; pdb.set_trace()
tag = Tag.objects.update(supertag__pk=y.pk)
tag.save()错误:
TypeError: 'supertag__pk' is an invalid keyword argument for this function我还尝试了tag = Tag.objects.update(supertag=supe),它给出了同样的错误
发布于 2017-05-15 13:01:52
supe是一个queryset,它没有pk属性。
此外,您对不同的变量使用相同的名称。标记已被分配。
supe = tag.all()当将标签分配给新对象时,会影响for循环的工作,该循环基于以前的标签变量。
tag = Tag.objects.get_or_create(supertag__pk=supe.pk)你不能这么做。
编辑
函数get_or_create实际上返回元组、一个对象和一个布尔标志。布尔标志指定对象是否已创建。所以,你实现的逻辑是错误的。正如我们所讨论的,
你可以这样做,
for x in supe:
if x.taglevel == 1:
for value in supe:
x.tag.add(value)
x.save()
else:
#your next logic
print("No level 1")https://stackoverflow.com/questions/43971758
复制相似问题