如何解决嵌套字典的Django模型错误
我是Django的新手,但不是python的新手,我的模型尝试使用一个类(在单独的文件中定义),该类中的数据来自REST API,检索到的数据位于嵌套字典中。该代码将在python中正常运行,但是当我在Django(makemigrations)中尝试时,出现错误:
GetFoundOnSelectItems中的文件“ c:\ blah-blah \ Clone_PR.py”,第20行 值= self._issueEdit [“字段”] [“ customfield_13940”] [“ allowedValues”] TypeError:“ NoneType”对象不可下标
我尝试使用类型提示,但这也不起作用。
models.py
from dal import autocomplete
from django.db import models
from django.contrib import messages
from .Login import jlogin
from .Jira_Constants import ProductionServer,TestServer,StageServer
from .Clone_PR import Issue
jira = None
issue = Issue()
class ClonePrLogin(models.Model):
username = models.CharField(max_length=30)
password = models.CharField(max_length=30)
@classmethod
def LoginToJira(cls):
global jira
jira = jlogin(ProductionServer,cls.username,cls.password)
class PrEntry(models.Model):
prToClone = models.CharField(max_length=20)
@classmethod
def GetIssueAndMeta(cls):
global issue
issue.initialize(jira,cls.prToClone)
class ClonePr(models.Model):
issueKey = issue.issueKey
issue.GetFoundOnSelectItems()
foundOnList = issue.foundOnSelectItems
foundOn = autocomplete.Select2ListChoiceField(choice_list=foundOnList)
Clone_PR.py
from typing import List,Dict
class Issue():
def __init__(self):
self.jiraInst = None
self.issueKey = ''
self._issue = None
self._issueEdit = None
# self._issueEdit = Dict[str,Dict[str,List[Dict[str,str]]]]]
self.foundOnSelectItems = []
def initialize(self,jira,prKey):
self.jiraInst = jira
self.issueKey = prKey
self._issue = jira.issue(prKey)
self._issueEdit = jira.editmeta(prKey)
def GetFoundOnSelectItems(self):
values = self._issueEdit["fields"]["customfield_13940"]["allowedValues"]
items = [x["value"] for x in values]
self.foundOnSelectItems = items
解决方法
在Django中,运行makemigrations
将加载所有模块。您说过您熟悉Python,所以您应该知道该类内部的声明:
class ClonePr(models.Model):
issueKey = issue.issueKey
issue.GetFoundOnSelectItems()
foundOnList = issue.foundOnSelectItems
foundOn = autocomplete.Select2ListChoiceField(choice_list=foundOnList)
将在模块加载时运行。当时您正在呼叫issue.GetFoundOnSelectItems()
,而后者依次呼叫values = self._issueEdit["fields"]["customfield_13940"]["allowedValues"]
,除了self._issueEdit = None
在上面实例实例Issue的开头带有以下行:issue = Issue()
之外。
我高度建议您花一些时间来熟悉Django启动应用程序的方式。这里的模块级和嵌套模型声明都是反模式,将来可能会导致数据问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。