【问题标题】:__str__ returned non-string (type NoneType) django__str__ 返回非字符串(NoneType 类型)django
【发布时间】:2021-05-31 12:42:56
【问题描述】:

我正在尝试输入 person 表,但出现此错误。 我已经连接了这两个模型,我正在返回字符串来连接它任何人都可以告诉我下面的解决方案是我的代码

这段代码来自models.py

from django.db import models

class Person(models.Model):
    PersonID=models.CharField(max_length=30,null=True)
    Lastname=models.CharField(max_length=30,null=True)
    Middlename=models.CharField(max_length=30,null=True)
    Firstname=models.CharField(max_length=30,null=True)
    Initials=models.CharField(max_length=10,null=True)
    Title=models.CharField(max_length=10,null=True)
    Gender=models.CharField(max_length=10,null=True)
    Birthdate=models.DateField(default=None,null=True)

    def __str__(self):
       return self.PersonID
    
    


class Function(models.Model):
    FunctionCode=models.CharField(max_length=30,null=True)
    FunctionName=models.CharField(max_length=30,null=True)
    MinSalary=models.IntegerField(null=True)
    MaxSalary=models.IntegerField(null=True)
    DefaultBillingRate=models.CharField(max_length=30,null=True)

    def __str__(self):
       return self.FunctionCode

此代码来自表单

from django.forms import ModelForm
from .models import Person

class PersonForm(ModelForm):
    class Meta:
        model = Person
        fields = '__all__'

此代码来自视图

from django.shortcuts import render
from .forms import Person
from .models import *


def createPerson(request):
    form = Person()

    context = {'form':form}
    return render(request, 'create_person.html', context )

此代码来自 person.html

{% extends 'main.html' %}
{% load static %}
{% block content %}

<form action="" method="POST">
    {% csrf_token %}
    {{form}}
    
    <input type="submit" name="Submit">
</form>


{% endblock %}

【问题讨论】:

  • 您在这些字段上有null=True,因此您有一些实例,其中这些值为null,因此__str__ 返回None。注意:您的所有字段也都有null=True??请研究一下如何设计一个好的数据库模式(通常会尽量避免空值)
  • 你能建议我在这里写什么而不是 null=true PersonID=models.CharField(max_length=30,null=True)
  • 我得到了视图形式的解决方案 = Person() 应该是 Personform()

标签: python mysql django


【解决方案1】:

如您所见,您的 FunctionCode 可以为空。
你的__str__ 方法应该只返回字符串,但是当FunctionCode 为空时,它将返回None 而不是string
您可以返回一个不可为空的字段,也可以这样做。

def __str__(self):
    if self.FunctionCode is not None:
        return self.FunctionCode
    return "Unknown"

【讨论】:

  • 我在 html 页面上收到未知句子,但我想在那边输入 personid、lastname、middlename.. 的值
【解决方案2】:

如果字段可以是 None (null=True),那么 __str__ 方法可以返回 None。你应该防止这种情况:

def __str__(self):
    return self.field or ''

如果不是None,则返回该字段的值,否则返回一个空字符串。

【讨论】:

    【解决方案3】:

    在这两个模型中,str方法返回的字段都可以为null,你必须建立一个条件。

    示例: 模型 -> 人

      def __str__(self):
        if self.PersonID is not None:
          return self.PersonID
        return "Custom String"
    

    模型 -> 功能

      def __str__(self):
        if self.FunctionCode is not None:
          return self.FunctionCode
        return "Custom String"
    

    【讨论】:

      猜你喜欢
      • 2018-04-17
      • 1970-01-01
      • 2018-03-02
      • 1970-01-01
      • 1970-01-01
      • 2021-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多