在我更改了一些模型字段(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的主要内容,如果未能解决你的问题,请参考以下文章

Django 忽略模型字段

将模型范围的帮助文本添加到 django 模型的管理表单

进行模型更改时,Django 依赖项引用不存在的父节点

Django模型南0.7.6迁移问题:表中的任何更改与另一个字段的默认值百分比

通过 Django 模型迁移覆盖表的风险?

根据另一个字段的值验证 Django 模型字段?