【发布时间】:2020-05-07 21:44:37
【问题描述】:
下新订单时出现错误。在与模型中的用户连接之前工作正常。当我创建一个单独的 user_page 视图并将客户模型与用户链接(从 django.contrib.auth.models 导入)时,它会出现此错误:
/create_order/ 处的类型错误 str 返回非字符串(NoneType 类型)
视图中的代码
@login_required(login_url='login')
def user_page(request):
orders=Customer.objects.filter(user=request.user)
context={'orders':orders}
return render(request, 'blog/user_page.html', context)
@unauthenticated_user
def registration_page(request):
if request.method=='POST':
form=CreationUserForm(request.POST)
if form.is_valid():
user=form.save()
group=Group.objects.get(name='customer')
user.groups.add(group)
Customer.objects.create(
user=user,
)
return redirect('login')
else:
form=CreationUserForm()
return render(request, 'blog/registration.html', {'form':form})
@login_required(login_url='login')
@admin_only
def home_page(request):
orders=Order.objects.all()
customer_data=Customer.objects.all()
total_orders=orders.count()
pending=Order.objects.filter(status='PENDING')
total_pending=pending.count()
out = orders.filter(status='OUTFORDELIEVERY')
total_out = out.count()
delievered = orders.filter(status='DELIEVERED')
total_delievered = delievered.count()
context={'orders':orders, 'customer_data':customer_data, 'total_orders':total_orders, 'total_pending': total_pending,
'total_out':total_out, 'total_delievered':total_delievered}
return render(request, 'blog/home_page.html', context)
@login_required(login_url='login')
@allowed_users(allowed_roles=['admin'])
def product_page(request):
return render(request, 'blog/product.html')
@login_required(login_url='login')
@allowed_users(allowed_roles=['admin'])
def customer_page(request, id):
customer=Customer.objects.get(id=id)
orders=customer.order_set.all()
total_orders=orders.count()
myFilter=OrderFilter(request.GET, queryset=orders)
orders=myFilter.qs
context={'customer':customer, 'total_orders':total_orders, 'orders':orders, 'myFilter':myFilter}
return render(request, 'blog/customer.html', context)
@login_required(login_url='login')
def create_order(request):
if request.method=='POST':
form=CustomerForm(request.POST)
if form.is_valid():
form.save()
return redirect('/')
else:
form=CustomerForm()
context={'form':form}
return render(request, 'blog/new_order.html', context)
模型中的代码
from django.db import models
from django.contrib.auth.models import User
# Create your models here.
class Customer(models.Model):
user=models.OneToOneField(User, null=True, on_delete=models.CASCADE)
name=models.CharField(max_length=200, null=True)
email=models.EmailField()
phone=models.IntegerField(null=True)
date_created=models.DateTimeField(auto_now_add=True, null=True)
def __str__(self):
return self.name
class Tag(models.Model):
name=models.CharField(max_length=200, null=True)
def __str__(self):
return self.name
class Product(models.Model):
name=models.CharField(max_length=200, null=True)
CATEGORY=(
('INDOOR','INDOOR'),
('OUTDOOR','OUTDOOR')
)
category=models.CharField(max_length=200, null=True, choices=CATEGORY)
date_created=models.DateTimeField(auto_now_add=True, null=True)
price=models.CharField(max_length=200, null=True)
tag=models.ManyToManyField(Tag)
class Order(models.Model):
customer=models.ForeignKey(Customer, null=True, on_delete=models.SET_NULL)
product=models.ForeignKey(Product, null=True, on_delete=models.SET_NULL)
date_created=models.DateTimeField(auto_now_add=True, null=True)
STATUS=(
('PENDING','PENDING'),
('OUTFORDELIEVERY','OUTFORDELIEVERY'),
('DELIEVERED','DELIEVERED')
)
status=models.CharField(max_length=200, choices=STATUS, null=True)
note=models.CharField(max_length=200, null=True)
order_no=models.CharField(max_length=200, null=True)
【问题讨论】:
-
如果有人知道这个错误,请提供帮助。
-
您可能在某处(不在此处)有一个
__str__,而没有有一个return(例如因为您忘记了)。
标签: django