在我更改了一些模型字段(Django)之后,尝试访问 django admin 时出现 /admin/myapp/mymodel 的 TypeError
Posted
技术标签:
【中文标题】在我更改了一些模型字段(Django)之后,尝试访问 django admin 时出现 /admin/myapp/mymodel 的 TypeError【英文标题】:TypeError at /admin/myapp/mymodel when trying to access django admin, after I changed some model fields (Django) 【发布时间】:2020-01-28 09:27:58 【问题描述】:我正在用 Django 开发一个应用程序。
在我重命名模型中的某些字段之前,它一直运行良好。 我已经运行了 migrate 和 makemigrations。 然后,当我以管理员广告身份登录时,尝试访问“myapp”部分中的“mymodel”,这就是我得到的:
/admin/myapp/glossary_entry/处的类型错误 格式字符串的参数不足
有什么问题? (在访问管理页面中的模型内容之前,我的应用程序中的其他所有内容都可以正常运行)
我在这里发布完整的错误信息:
/admin/myapp/glossary_entry/ 处的 TypeError 不够 格式字符串的参数请求方法:GET请求 网址:http://127.0.0.1:8000/admin/myapp/glossary_entry/ Django 版本:2.2.2 异常类型:TypeError 异常值:不是 格式字符串异常的足够参数 位置:C:\Users\Tommaso\Django rest framework\Udemy str 中的 Django\Myproject\myapp\models.py, 第 95 行 Python 可执行文件:C:\Applicazioni_Tommaso\Phyton\python.exe Python 版本:3.6.5 Python 路径:['C:\Users\Tommaso\Django rest 框架\Udemy ''Django\Myproject', 'C:\Applicazioni_Tommaso\Phyton\python36.zip', 'C:\Applicazioni_Tommaso\Phyton\DLLs', 'C:\Applicazioni_Tommaso\Phyton\lib', 'C:\Applicazioni_Tommaso\Phyton', 'C:\Applicazioni_Tommaso\Phyton\lib\site-packages', 'C:\Applicazioni_Tommaso\Phyton\lib\site-packages\pip-19.1.1-py3.6.egg'] 服务器时间:2019 年 9 月 28 日星期六 08:56:32 +0000 模板期间出错 在模板中渲染 C:\Applicazioni_Tommaso\Phyton\lib\site-packages\django\contrib\admin\templates\admin\base.html, 第 62 行的错误
格式字符串 52 % endblock % 的参数不足 53 54 % endif % 55 % endblock % 56 % block nav-global %% endblock % 57 58 59 % block breadcrumbs % 60 61 % trans '首页' % 62 % if title % › title % endif % 63 64 % endblock % 65 % endif % 66 67 % 阻止消息 % 68 % if messages % 69 % for message in messages % 70 消息|capfirst 71 % endfor % 72 % endif %
这是我的 admin.py:
from django.contrib import admin
from .models import glossary_entry
admin.site.register(glossary_entry)
这是我的model.py:
from django.db import models
from django.utils import timezone
from django.core.exceptions import ValidationError
Admin_approval_switch_choices=[
("show","show"), # 1=valore da inserire negli script (=variabile), 2=valore assunto in relatà nel db
("hide","hide"),
]
class glossary_entry(models.Model):
Lemma = models.CharField(max_length=256, blank=True, null=True)
Acronimo = models.CharField(max_length=25, blank=True, null=True)
Definizione = models.TextField(blank=True, null=True)
Ambito_riferimento = models.CharField(max_length=256, blank=True, null=True)
Autore_definizione = models.CharField(max_length=256, blank=True, null=True)
Posizione_definizione = models.CharField(max_length=256, blank=True, null=True)
Url_definizione = models.URLField(max_length=400, blank=True, null=True)
Titolo_documento_fonte = models.CharField(max_length=256, blank=True, null=True)
Autore_documento_fonte = models.CharField(max_length=256, blank=True, null=True)
Host_documento_fonte = models.CharField(max_length=256, blank=True, null=True)
Url_documento_fonte = models.URLField(max_length=400, blank=True, null=True)
Data_inserimento_entry = models.DateField(blank=False, null=False, default=timezone.now().date() )
Id_statico_entry = models.CharField(max_length=256, blank=False, null=False, default="ITCH00000")
Admin_approval_switch = models.CharField(max_length=30,blank=False, null=False, default=Admin_approval_switch_choices[1], choices=Admin_approval_switch_choices)
class Meta:
ordering = ['-Admin_approval_switch', 'Lemma', 'Id_statico_entry']
def clean(self):
if not (self.Lemma or self.Acronimo or self.Definizione or self.Ambito_riferimento or self.Autore_definizione or self.Posizione_definizione or self.Url_definizione or self.Titolo_documento_fonte or self.Autore_documento_fonte or self.Host_documento_fonte or self.Url_documento_fonte):
raise ValidationError("Non è stata inserita alcuna terminologia. Compilare almeno un campo del form.")
def __str__(self):
return "%s / %s - %s - [%s]" % (self.Lemma, self.Id_statico_entry, self.Admin_approval_switch)
【问题讨论】:
请显示模型和 ModelAdmin 类的完整代码。 帖子已更新。让我知道现在是否清楚,请 【参考方案1】:已解决:
在类元的最后一行,在model.py中:
def __str__(self):
return "%s / %s - %s - [%s]" % (self.Lemma, self.Id_statico_entry, self.Admin_approval_switch)
“字符串插入标签”和“插入参数”不匹配(请原谅我的英语不好)。
我将这一行替换为:
def __str__(self):
return "%s - %s - [%s]" % (self.Lemma, self.Id_statico_entry, self.Admin_approval_switch)
现在一切正常。
【讨论】:
其实很简单,错误指出:第 62 行的 typer 错误,但它指向的是 base.html 而不是 model.html。 Base.html 包含一个顶部导航栏内容,然后显示在我项目的所有页面中。以上是关于在我更改了一些模型字段(Django)之后,尝试访问 django admin 时出现 /admin/myapp/mymodel 的 TypeError的主要内容,如果未能解决你的问题,请参考以下文章