首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HTML at /add_ TypeError /HTML

HTML at /add_ TypeError /HTML
EN

Stack Overflow用户
提问于 2020-10-19 11:38:49
回答 1查看 59关注 0票数 0

在页面上获取此错误:

TypeError at /add_items/

str返回非字符串(NoneType类型)请求方法: GET请求URL:http://127.0.0.1:8000/add_items/ Django版本: 3.0.7异常类型: TypeError异常值:

str返回非字符串(NoneType类型)

意见:

代码语言:javascript
复制
def add_items(request):
    form = StockCreateForm(request.POST or None)
    if form.is_valid():
        form.save()
        messages.success(request, 'Successfully Saved')
        z=messages.success(request, 'Successfull')
        print(z)
        return redirect("admin.home")
    context = {
    "form": form,
    "title": "Add Item",
    }
    return render(request, "hdm_template/add_items.html", context)

Html页面:

代码语言:javascript
复制
{% extends 'hdm_template/base_template.html' %}

{% block page_title %}
    Add Item
{% endblock page_title %}

{% block main_content %}

{% load static %}
{% load crispy_forms_tags %}


<section class="content">
  <div class="wrapper">

      <div class="row">
          <div class="col-md-12">
              <!-- general form elements -->
              <div class="card card-primary">
              <div class="card-header">
                  <h3 class="card-title">Add Item</h3>
              </div>
              <!-- /.card-header -->
              <!-- form start -->
              <form method='POST' action=''>
                <div class="form-row">
                  <div class="form-group col-md-6 mb-0">
                    {{ form.category|as_crispy_field }}
                  </div>
                </div>
                <div class="form-row">
                  <div class="form-group col-md-6 mb-0">
                    {{ form.item_name|as_crispy_field }}
                  </div>
                  <div class="form-group col-md-2 mb-0">
                    {{ form.quantity|as_crispy_field }}
                  </div>
                </div>
                  <input class="btn btn-primary" type="submit" value='Save'>
                </form>
              </div>
              <!-- /.card -->

          </div>
      </div>

  </div><!-- /.container-fluid -->
</section>

URL:

代码语言:javascript
复制
path('add_items/',HDMViews.add_items,name='add_items'),

模型:

代码语言:javascript
复制
class Stock(models.Model):
    category = models.ForeignKey(Category, on_delete=models.CASCADE,blank=True )
    item_name = models.CharField(max_length=50, blank=True, null=True)
    quantity = models.IntegerField(default='0', blank=True, null=True)
    
    def __str__(self):
        return self.item_name

forms.py:

代码语言:javascript
复制
from django import forms
from django.forms import Form
from .models import *

class StockCreateForm(forms.ModelForm):
    class Meta:
        model = Stock
        fields = ['category', 'item_name', 'quantity']

    def clean_item_name(self):
        item_name = self.cleaned_data.get('item_name')
        if not category:
            raise forms.ValidationError('This field is required')

        for instance in Stock.objects.all():
            if instance.category == item_name:
                raise forms.ValidationError(str(item_name) + ' is already created')

        return category


    def clean_item_name(self):
        item_name = self.cleaned_data.get('item_name')
        if not item_name:
            raise forms.ValidationError('This field is required')
        return item_name

我不明白哪里出了问题

EN

回答 1

Stack Overflow用户

发布于 2020-10-19 12:41:15

__str__必须返回一个字符串。在您的例子中,self.item_name是可空的。看起来这就是产生错误的原因。尝试将代码更改为如下内容:

代码语言:javascript
复制
def __str__(self):
    return self.item_name if self.item_name or str(self.pk)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64426557

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档