【问题标题】:__str__ returned non-string (type NoneType)__str__ 返回非字符串(NoneType 类型)
【发布时间】:2018-03-02 16:55:45
【问题描述】:

当我尝试保存课程中的一个步骤时,我收到了一个错误 str 返回非字符串(NoneType 类型)

您可以使用以下网址下载屏幕截图

step page details

当我尝试保存时:

error page

我的代码是

网址格式:

urlpatterns = [
    url(r'^$', views.course_list),
    url(r'(?P<pk>\d+)/(?P<pk>\d+)/$', views.step_details),  
    url(r'(?P<pk>\d+)/$', views.course_details),
]

models.py:

class Course(models.Model):
    created_at = models.DateTimeField(auto_now_add=True)
    title = models.CharField(max_length=255)
    description = models.TextField()

    def __str__(self):
        return self.title

    class Step(models.Model):
        title = models.CharField(max_length = 255)
        description = models.TextField()
        order = models.IntegerField(default=0)
        course = models.ForeignKey(Course)

        class Meta:
            ordering = ['order', ]


        def __str__(self):
            self.title

views.py:

def step_details(request, course_pk, step_pk):
    step = get_object_or_404(Step, course_id = course_pk, pk=step_pk)
    return render(request, 'courses/step_details.html', {'step':step})

step_details.html:

{% extends "layout.html"%}


{% block title%} {{step.title}} - {{ step.course.title }} {% endblock title %}

{% block content %}
<article>
<h2> {{ step.course.title }} </h2>
{{ step.description }}
{{ step.content|linebreaks }}
{{ step.course.created_at }}

{##}
{#    <section>#}
{#      {% for step in course.step_set.all %}#}
{#        <h3> {{ step.title}}</h3>#}
{#      {{step.description}}#}
{#      {% endfor %}#}
{#    </section>#}
 </article>
{% endblock %}

谢谢...

【问题讨论】:

    标签: django django-models django-views


    【解决方案1】:

    你的缩进错了,你在一个类里面写了一个类

    class Course(models.Model):
        created_at = models.DateTimeField(auto_now_add=True)
        title = models.CharField(max_length=255)
        description = models.TextField()
    
        def __str__(self):
            return self.title
    
    class Step(models.Model):
       title = models.CharField(max_length = 255)
       description = models.TextField()
       order = models.IntegerField(default=0)
       course = models.ForeignKey(Course)
    
       class Meta:
          ordering = ['order', ]
    
    
       def __str__(self):
          return self.title
    

    【讨论】:

    • __str__ 不应该是 return 吗?
    • @Exprator 感谢您的回复。我正在学习一个教程..下面是他们如何配置步骤过程的屏幕截图.. 类 Meta 是在 Class Step 中编写的。我认为这就是你如何为模型实现元类。如果我遗漏了什么,请解释一下。配置图片的链接(来自他的教程)step_meta str 正在返回self.tite..
    猜你喜欢
    • 2018-04-17
    • 1970-01-01
    • 1970-01-01
    • 2021-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-02
    • 1970-01-01
    相关资源
    最近更新 更多