如何在Django模型的setter中设置外键

2024-09-30 22:26:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个名为object的属性,其中包含一些值,我需要设置其中一个值,即外键的id。我解析这些值并使用setattr()函数,但出现以下错误:

File "/home/hezardastan/.pyenv/versions/bepa2/lib/python3.7/site-packages/django/db/models/fields/related_descriptors.py", line 219, in __set__
    self.field.remote_field.model._meta.object_name,
ValueError: Cannot assign "'259fe104-cb7f-4cc7-b32f-4bf4d39038ed'": "Rule.workspace" must be a "Workspace" instance.

如果我发送的是对象而不是pk,我会得到以下错误:

  File "/home/hezardastan/Desktop/work/bepa2/bepa2/src/rbac/models.py", line 100, in object
    setattr(self, k, v)
  File "/home/hezardastan/.pyenv/versions/bepa2/lib/python3.7/site-packages/django/db/models/fields/related_descriptors.py", line 223, in __set__
    if instance._state.db is None:
AttributeError: 'Rule' object has no attribute '_state'

这是我的setter,workspace是一个外键,也是parse\u rri返回的dict的键值之一:

    @object.setter
    def object(self, value):
        for k, v in self.parse_rri(value).items():
            setattr(self, k, v)

Tags: inpyselfpyenvhomedbobjectmodels