python - Django 多对多字段导致错误

标签 python django python-2.7 many-to-many

我创建了一个将对象添加到模型的函数。它看起来像这样:

def add_objects(self,obj_name_list):
    for obj in obj_name_list:
        o = Obj.objects.create(name=obj)
        self.objs.add(o)
        self.save(update_fields['objs'])

但是当我运行它时,出现以下错误:

ValueError: The following fields do not exist in this model or are m2m fields: objs

错误来自 save() 调用,但我不明白为什么...请在您的回答中给出详细解释。谢谢!

这是回溯

.../models.pyc in add_objects(self, obj_name_list)
    125                                 o = Obj.objects.create(name=obj) #create the tag
    126                                 self.objs.add(o) #add the new tag to the foreign key
--> 127                                 self.save(update_fields=['objs'])
    128                 except TypeError:
    129                         raise TypeError("You can only add objects as a string or list")

.../models.pyc in save(self, *args, **kwargs)
     95                 if not self.pk:
     96                         is_created = True
---> 97                 super(Model, self).save(*args, **kwargs)
     98                 if is_created:
     99                         signals.model_created.send(sender=self.__class__) #send signal if just created

/Library/Python/2.7/site-packages/Django-1.6-py2.7.egg/django/db/models/base.pyc in save(self, force_insert, force_update, using, update_fields)
    523                 raise ValueError("The following fields do not exist in this "
    524                                  "model or are m2m fields: %s"
--> 525                                  % ', '.join(non_model_fields))
    526
    527         # If saving to the same database, and this model is deferred, then

最佳答案

如回溯所示,那不是您运行的代码。有问题的代码是这样的:

self.save(update_fields=['objs'])

这确实会导致问题,因为 objs 不是该模型上的实际字段:它是链接表中的一列。

事实上,如果您没有修改任何其他字段,则根本不需要调用 save:在 m2m 字段上调用 ​​add 已经修改了数据库。

关于python - Django 多对多字段导致错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21171403/

相关文章:

Django - 创建模型时是否可以添加默认值?

python - pygame.error : Failed loading libmpg123. dll:尝试访问无效地址

python - 如何在 Python 中只处理一次重复的有序列表中的每个项目?

尽管我正在执行 str.decode(),但 Python 会抛出 UnicodeEncodeError。为什么?

python - 保存我多次使用的列表的长度是否更好?

python - 控制 jupyterlab 服务器中使用的 CPU 数量

python - 为什么 Python `Memory Error` 列表 `append()` 剩余大量 RAM

django Rest框架通过POST创建嵌套对象 "Models"

python - 我收到此错误 "didn' t 返回一个 HttpResponse 对象。它返回 None 而不是“

python - 在 64 位机器的 python 2.7 中安装 NLTK