我正在使用Django构建一个API,它允许外部应用程序向我的API发送帖子,然后将接收到的数据插入到我的数据库中。
以下是我的简化模型:
class Region(models.Model):
name = models.CharField(max_length=250)
class Event(models.Model):
name = models.CharField(max_length=250)
region = models.ManyToManyField(Region)
我从api中收到一些新的事件数据,如下所示:
data = {
"name": "First Event",
"region": "4" # this is the ID of the region
}
我正在尝试创建这样一个新的事件:
Event.objects.create(**data)
但我得到了以下错误:
Direct assignment to the forward side of a many-to-many set is prohibited. Use region.set() instead.
问题是我不能使用new_event.region.add(4)
,因为region
是一个字符串,因为这是一个API,所以字段总是作为一个json键被检索。
我阅读了这个问题https://stackoverflow.com/questions/8360867/update-many-to-many-field-in-django-with-field-name-in-variable#,它问的完全一样,但给出的答案是不起作用的原因,当我写:
new.__getattribute__(relation_name) = my_authors
正如建议的那样,我得到了以下错误,这是有意义的:
SyntaxError: can't assign to function call
那么,如何通过manytoMany添加一个fieldName字段值呢?
发布于 2020-03-31 15:33:00
在链接问题中给出的答案不起作用,因为它已经有9年历史了,然后分配m2m字段过去是这样的:new_event.region = [4]
然而,这在很久以前就被废弃了,现在语法是:
new_event.region.set(4)
这正是您得到以下错误的原因:
禁止将
直接分配到多对多集合的前侧.使用region.set()代替。
因为你实际上想做的是:
`new_event.region =4‘
这当然行不通。
但是,代码的其余部分应该很好(即__getattribute__
部分)。因此,您需要做的是调用__getattribute__
返回的内容的__getattribute__
方法。即
new_event.__getattribute__("region").add(4)
但是,不必使用__getattribute__
dunder方法,可以将其简化为:
getattr(new_event, "region").add(4)
https://stackoverflow.com/questions/60950544
复制相似问题