在尝试将实例添加到我的某个模型时,admin会返回此错误。模型本身具有正确的 str ()方法,并且不包含任何实例。还尝试用静态方法替换 str ()方法或完全删除它。没有运气。
错误似乎指向管理员的历史记录部分出现问题。 Stacktrace指向第33行。
Error during template rendering
In template /Users/snirp/juis/snirpdrive/glotto/venv/lib/python3.6/site-packages/django/contrib/admin/templates/admin/change_form.html, error at line 33
__str__ returned non-string (type NoneType)
23 {% endblock %}
24 {% endif %}
25
26 {% block content %}<div id="content-main">
27 {% block object-tools %}
28 {% if change %}{% if not is_popup %}
29 <ul class="object-tools">
30 {% block object-tools-items %}
31 <li>
32 {% url opts|admin_urlname:'history' original.pk|admin_urlquote as history_url %}
33 <a href="{% add_preserved_filters history_url %}" class="historylink">{% trans "History" %}</a>
34 </li>
35 {% if has_absolute_url %}<li><a href="{{ absolute_url }}" class="viewsitelink">{% trans "View on site" %}</a></li>{% endif %}
36 {% endblock %}
37 </ul>
38 {% endif %}{% endif %}
39 {% endblock %}
40 <form {% if has_file_field %}enctype="multipart/form-data" {% endif %}action="{{ form_url }}" method="post" id="{{ opts.model_name }}_form" novalidate>{% csrf_token %}{% block form_top %}{% endblock %}
41 <div>
42 {% if is_popup %}<input type="hidden" name="{{ is_popup_var }}" value="1" />{% endif %}
43 {% if to_field %}<input type="hidden" name="{{ to_field_var }}" value="{{ to_field }}" />{% endif %}
这些是我models.py
和admin.py
class UserContent(models.Model):
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
created_by = models.ForeignKey(User, related_name='%(class)s_creator')
updated_by = models.ForeignKey(User, related_name='%(class)s_updater')
class Meta:
abstract = True
class Linetrans(UserContent):
line = models.ForeignKey(Line)
translation = models.ForeignKey(Translation)
text = models.CharField(max_length=400)
#def __str__(self):
# return self.text
class Meta:
ordering = ['line']
和
admin.site.register(Linetrans)
其他模型类非常相似,不会返回错误。当Linetrans作为内联添加到另一个管理类时,也会发生错误。
编辑/更新:我在模型中注释掉了所有其他str()方法,果然错误似乎消失了。现在试图找出问题。
答案 0 :(得分:29)
事实证明相关模型中存在意外的空CharField。留下这个答案,因为它可能会帮助别人。
通过系统地评论模型的__str__()
方法来解决问题,直到找到有问题的模型为止。从那里开始工作以识别违规记录。
答案 1 :(得分:6)
我有类似的问题。问题是一行的主键是null(我不知道是怎么回事)。由于级联问题,我无法删除该行。所以我不得不将 str mmethod更改为这样的事情。
def __str__(self):
if self.customerName==None:
return "ERROR-CUSTOMER NAME IS NULL"
return self.customerName
答案 2 :(得分:2)
对于此错误,您可以使用两种解决方案
第一个解决方案:您可以在代码下方将其注释掉
def __str__(self):
return self.id
到
#def __str__(self):
# return self.id
安全解决方案:您可以从对象返回字符串
def __str__(self):
return str(self.id)
答案 3 :(得分:1)
您还可以从Django shell python manage.py shell
中删除导致此问题的模型中的实例。当您处理具有许多相关模型(例如我的模型)的模型时,这会有所帮助。
通常,此问题是由更改模型字段和 迁移,从而使实例彼此不兼容 和相关字段
答案 4 :(得分:1)
就我而言,我遇到了同样的问题,其根源是:对于__str__
函数中使用的字段,数据库中保存了空值。
所以我可以通过以下方式解决问题:
update table
set field_for_STR_use = 'any value'
where field_for_STR_use is null or field_for_STR_use = ''
之后,我只刷新了视图,问题消失了。
答案 5 :(得分:1)
有一个外部引用返回了非字符串字段。我将其更改为字符串字段,也可以更改为str(foreign-key-return-element) 名称= models.CharField(max_length = 200,unique = True)#文章名称 parent = models.ForeignKey('self',on_delete = models.DO_NOTHING,related_name ='category_parent_item',default = None,null = True)#存储子项 created_at = models.DateTimeField(auto_now = True)#创建日期 Updated_at = models.DateTimeField(auto_now = True)#更新日期 用户=模型。ForeignKey(get_user_model(),
on_delete = models.DO_NOTHING,related_name ='category_update_user',默认=无,null = True)#更新文章的用户
def __str__(self):
return self.name ----------> this was an integer field initially in foreign reference
答案 6 :(得分:0)
def __str__(self):
return str(self.topic)
使用str使其键入字符串。 那不是非字符串类型。
答案 7 :(得分:0)
查看您在
中引用的班级 models.ForeignKey
问题出在
__str__()
这些类之一的方法。 然后,添加
or ''
在此类的return语句中。
def __str__(self):
return self.title or ''
答案 8 :(得分:0)
在我的情况下,我有另一个模型,该模型被另一个具有VSCode默认片段的模型调用:
def __str__(self):
return
这导致了错误,即使它在日志中显示了另一个位置。
答案 9 :(得分:0)
如果您尝试使用__str__()
返回ForeignKey
或OneToOneField
的值,则会返回错误
示例:
def __str__():
return self.user # where user is a key to other model class
应该是:
def __str__():
return self.user.__str__()
# Or basically any other way that would explicitly unbox the value inside the related model class.