Django AttributeError在尝试保存模型实例时出错

2024-10-02 02:24:41 发布

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

我的Django模型中有以下代码:

from __future__ import annotations
from typing import Tuple, List, Dict, Callable
from datetime import date
from django.contrib.auth.models import User
from django.db.models import Model, ForeignKey, CASCADE, CharField, TextField, DateField
from enum import Enum

class RequestState(Enum):
    OPEN = 'OPEN'
    ACCEPTED = 'ACC'
    DECLINED = 'DEC'
    DELETED = 'DEL'

_state_parser: Dict[str, RequestState] = {
    "OPEN": RequestState.OPEN,
    "ACC": RequestState.ACCEPTED,
    "DEC": RequestState.DECLINED,
    "DEL": RequestState.DELETED
}

class ActionRequest(Model):
    issuer = ForeignKey(User, on_delete=CASCADE, null=False, related_name="issuer")
    receiver = ForeignKey(User, on_delete=CASCADE, null=False, related_name="receiver")
    _state = CharField(max_length=4, default=RequestState.OPEN.value, null=False)
    action = TextField(null=False)
    issue_date = DateField(null=False, default=date.today)
    last_change_date = DateField(null=False, default=date.today)

    class InvalidRequestStateException(Exception):

        def __init__(self, request: ActionRequest):
            self.request = request
            super(str(self))

        def __str__(self):
            return f'ActionRequest is in invalid state: {self.request.state}'

    @property
    def state(self) -> RequestState:
        return _state_parser[self._state]

    @state.setter
    def state(self, state: RequestState) -> None:
        self._state = state.value

当我尝试创建一个新的模型实例并按如下方式保存它时:

action_request = ActionRequest(
            issuer=user,
            receiver=receiver,
            action=action
        )
action_request.save()

我得到以下错误:

  File ~\app\views\action_request_view.py", line 53, in post
    action_request.save()
  File "~\venv\lib\site-packages\django\db\models\base.py", line 678, in save
    if field.is_relation and field.is_cached(self):
  File "~\venv\lib\site-packages\django\db\models\fields\mixins.py", line 20, in is_cached
    return self.get_cache_name() in instance._state.fields_cache
AttributeError: 'str' object has no attribute 'fields_cache'

我正在使用Django3.0。我已经尝试过使用AcrionRequest.objects.create,以及使用choices参数将_state字段更改为IntegerField,但是在这种情况下,我只得到了相同的错误,只是使用了“int”而不是“str”


Tags: djangoinfromimportselffalsedatemodels

热门问题