在页面上获取此错误:
TypeError at /add_items/
str返回非字符串(NoneType类型)请求方法: GET请求URL:http://127.0.0.1:8000/add_items/ Django版本: 3.0.7异常类型: TypeError异常值:
str返回非字符串(NoneType类型)
意见:
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页面:
{% 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:
path('add_items/',HDMViews.add_items,name='add_items'),模型:
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_nameforms.py:
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我不明白哪里出了问题
发布于 2020-10-19 12:41:15
__str__必须返回一个字符串。在您的例子中,self.item_name是可空的。看起来这就是产生错误的原因。尝试将代码更改为如下内容:
def __str__(self):
return self.item_name if self.item_name or str(self.pk)https://stackoverflow.com/questions/64426557
复制相似问题