首页 > 解决方案 > 数据库中的空条目,当我单击它们时,我在 /admin/users/personal_detail/90/change/ __str__ 返回非字符串(类型 NoneType)

问题描述

这就是我的 base.html 的样子,一切正常,直到我做了一些更改添加 jquery

{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>

    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

    <!-- Bootstrap CSS -->
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
    <link rel="stylesheet" type ="text/css" href="{% static 'pmmvyapp/main.css' %}">
    <link href="{% static 'js/jquery.js' %}" rel="stylesheet">
    {% if title %}
    <title> PMMVY-{{ title }}</title>
    {% else %}
    <title>PMMVY</title>
    {% endif %}
</head>
<body>
    <header class="site-header">
        <nav class="navbar navbar-expand-md navbar-dark bg-steel fixed-top">
          <div class="container">
            <a class="navbar-brand mr-4"><img src="{% static 'images/left-logo.png' %}" width="83"      height="89" class='d-inline-block' alt=""/>
                <span style="color:white"> Ministry of Women &amp; Child Development | GoI</span>
           </a>

            <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarToggle" aria-controls="navbarToggle" aria-expanded="false" aria-label="Toggle navigation">
            <span class="navbar-toggler-icon"></span>
            </button>
            <div class="collapse navbar-collapse" id="navbarToggle">
              {% if user.is_authenticated %}
                <a class="btn btn-primary mr-4" href="{% url 'aganwadi' %}">Aganwadi</a>
                <a class="btn btn-primary mr-4" href="{% url 'applyonline' %}">Apply online</a>
              {% else %}

                <div class="navbar-nav mr-auto">

                  <a class="navbar-brand mr-4"><img src="{% static 'images/emblem-dark.png' %}" width="60"      height="80" class='d-inline-block' alt=""/> <span style="color:white" >Pradhan Mantri Matru Vandana Yojana</span> </a>
                </div>

              {% endif %}  
              <!-- Navbar Right Side -->
              <div class="navbar-nav">
                {% if user.is_authenticated %}
                <div class="navbar-nav mr-auto">
                  <a class="btn btn-primary mr-4" href="{% url 'admin:index' %}"> Admin site </a>
                  <a class="btn btn-primary mr-4" href="{% url 'logout' %}">Logout</a>
                </div>
                {% else %}


                  <div class="navbar-nav mr-auto">


                    <a class="navbar-brand mr-4" href="{% url 'login' %}"><img src="{% static 'images/pm.png' %}" width="65"      height="70" class='d-inline-block' alt=""/> <span class="btn btn-primary"  style="color:black  mr-4" >Login</span> </a>
                  </div>

                {% endif %}
              </div>
            </div>
          </div>
        </nav>
      </header>

<!--mainsec-->

<main role="main" class="container">
  <div>
    {% if messages %}
      {% for message in messages%}
          <div class="alert alert-{{ message.tags }}">
              {{ message }}
          </div>
      {% endfor %}
    {% endif %}
  </div> 
    <div class="row">

        {% block content %}{% endblock %}

      </div>     

  </main>

<!--end mainsec-->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="{% static 'js/custom.js' %}"></script>

<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular.min.js"></script>
</body>
</html>

这就是我的 applyonline.html 的样子

<body ng-app="">
  {% extends "pmmvyapp/base.html" %}
  {% load crispy_forms_tags %}
  {% load static %}
  {% block content%}
  <div class="col-md-8">
    <form method="post" action="/personal_detail/" enctype="multipart/form-data">
      <div class="group">
        <div class="hide" id="q1">

      </div>
      </div>
</div>
    <div class="hide" id="q2">two</div>
    <div class="hide" id="q3">three</div>
    <div class="hide" id="q4">four</div>
    </div>
    <div style="margin-bottom:10px "> 
    <button id="next">Next</button> <button id="prev">Previous</button>
   </div>
    <button type="submit" class="btn btn-primary" style="margin-bottom:10px ">Submit</button>
  </form>
  </div>    

       <style>
       .hide
       {
         display : none;
        }

       </style>      
  {% endblock %}
  </body>

我的设置.py

INSTALLED_APPS = [
    'jquery', 
    'captcha',
    'users.apps.UsersConfig',
    'pmmvyapp.apps.PmmvyappConfig',
    'crispy_forms',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

我的 models.py 我要返回其中一个名称

class Personal_Detail(models.Model):
    beneficiary_adhaar_name=models.TextField(blank=True, null=True)
    adhaarno=models.IntegerField(blank=True, null=True)
    adhaarcopy = models.FileField(upload_to='adhaar/')


    idcard=models.TextField(blank=True, null=True)
    adhaar_eid=models.IntegerField(blank=True,null=True)    
    beneficiary_id_name=models.TextField(blank=True, null=True)
    idno=models.IntegerField(blank=True, null=True)
    idcopy=models.FileField(upload_to='identitycard/')

    def __str__(self):
        return self.beneficiary_adhaar_name or self.beneficiary_id_name

我的意见.py

@login_required
def ApplyOnline(request):
    return render(request,'users/applyonline.html')
@login_required
def personal_detail(request):
   # ShowHideExample = request.POST.get('showHideExample',False)
    beneficiary_adhaar_name=request.POST.get('beneficiary_adhaar_name')
    adhaarno=request.POST.get('adhaarno')
    adhaarcopy = request.FILES.get('adhaarcopy')
    idcard=request.POST.get('idcard')
    adhaar_eid=request.POST.get('adhaar_eid')   
    beneficiary_id_name=request.POST.get('beneficiary_id_name')
    idno=request.POST.get('idno')
    idcopy = request.FILES.get('idcopy')
    apply_online = Personal_Detail(beneficiary_adhaar_name=beneficiary_adhaar_name,adhaarno=adhaarno,adhaarcopy=adhaarcopy,
    idcard=idcard,adhaar_eid=adhaar_eid,beneficiary_id_name=beneficiary_id_name,idno=idno,idcopy=idcopy)
    apply_online.save()
    return render(request,'users/applyonline.html')

我不知道导致此问题的问题,当我突然对查询进行一些更改以创建多步骤表单时,它工作正常,当检查数据库时,我得到一些空条目,当我单击或尝试删除它们时,我出错了。我已经包含了我得到的空条目的图像。在此处输入图像描述

标签: pythonjquerydjango

解决方案


基本上你的模型的__str__方法是返回无。表示两个字段的值都是无。您需要从该方法返回一个字符串值。例如:

class Personal_Detail(models.Model):
    # rest of the code

    def __str__(self):
        return self.beneficiary_adhaar_name or self.beneficiary_id_name or str(self.pk)

推荐阅读