首页 > 解决方案 > 错误:__str__ 返回非字符串(类型 DetComponente)/

问题描述

万岁开发者。我在模板渲染期间遇到了这个错误。我尝试了多种资源来查找错误,但无法解决它。我想要一些关于走哪条路的帮助。谢谢

TypeError at /form_mat/
__str__ returned non-string (type DetComponente)
Request Method: GET
Request URL:    http://127.0.0.1:8000/form_mat/
Django Version: 3.2
Exception Type: TypeError
Exception Value:    
__str__ returned non-string (type DetComponente)
Exception Location: C:\webcq\venv\lib\site-packages\django\forms\models.py, line 1253, in label_from_instance
Python Executable:  C:\webcq\venv\Scripts\python.exe
Python Version: 3.8.6

楷模

class DetComponente(models.Model):
    componentes = models.CharField (max_length=50, null=True)

    def __str__(self):
        return self.componentes


class Componente(models.Model):
    componentes = models.ForeignKey (DetComponente, on_delete=models.CASCADE)
    descricao = models.CharField (max_length=50)

    def __str__(self):
        return self.componentes


class EspecComponentes (models.Model):
    componentes = models.ForeignKey (Componente, on_delete=models.CASCADE)
    codigo = models.ForeignKey (Codigo, on_delete=models.CASCADE)
    espec_material = models.ForeignKey (EspecMaterial, on_delete=models.CASCADE)
    diametro1 = models.FloatField (blank=True)
    diametro2 = models.FloatField (blank=True)
    peso = models.FloatField (null=True, blank=True)

    class Meta:
        ordering = ['componentes']

    def __str__(self):
        return str (self.componentes)

意见

def view_mat(request, pk):
    data = {}
    data['db'] = EspecComponentes.objects.get(pk=pk)
    return render(request, 'materiais/view.html', data)

标签: djangostringtemplates

解决方案


__str__方法必须返回str typevalue 但DetComponente正在返回NoneType。您可以检查是否DetComponente.componentes为 None 并在这种情况下返回默认字符串或空字符串。

class DetComponente(models.Model):
    componentes = models.CharField (max_length=50, null=True)

    def __str__(self):
        return self.componentes or ""

推荐阅读