django - django中成功重定向的AttributeError?
问题描述
来自主机视图的成功 POST 请求的重定向。
def product_page_view(request, prod_slug, color=None, size=None):
...
...
prod = Product.objects.filter(slug=prod_slug).first()
seller = prod.seller
...
....
order_form = Buy_now_form()
if request.method == "POST":
order_form = Buy_now_form(request.POST)
if order_form.is_valid():
# Function for processing POST request and return order
order = buy_now_view(request, prod.slug, color, size)
# Redirection
return redirect(reverse('product-shipping', kwargs={'order_id':order.order_id}))
...
主机视图和目标视图的 url 是
...
path('products/<slug:prod_slug>/<str:color>/<str:size>/', product_page_view, name="product-page-view-color-size"),
path('products/<int:order_id>/shipping/', shipping_view, name="product-shipping"),
...
虽然,函数重定向成功,但带有 AttributeError 和以下回溯。
Traceback (most recent call last):
File "/home/dixitgpta/byghouz/byghouz_env/lib/python3.7/site-packages/django/core/handlers/exception.py", line 34, in inner
response = get_response(request)
File "/home/dixitgpta/byghouz/byghouz_env/lib/python3.7/site-packages/django/core/handlers/base.py", line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File "/home/dixitgpta/byghouz/byghouz_env/lib/python3.7/site-packages/django/core/handlers/base.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/dixitgpta/byghouz/project/products/views.py", line 575, in product_page_view
seller = prod.seller
Exception Type: AttributeError at /products/54795882652377/shipping/
Exception Value: 'NoneType' object has no attribute 'seller'
产品型号:
class Product(models.Model):
seller = models.ForeignKey(BygSeller, on_delete=models.CASCADE)
id = models.IntegerField(primary_key=True)
slug = models.SlugField(max_length=250, null=True, blank=True)
title = models.CharField(max_length=100)
short_descrition = models.CharField(max_length=150, default=' ')
date = models.DateField(auto_now_add=True)
step1 = models.BooleanField(default=False)
step2 = models.BooleanField(default=False)
step3 = models.BooleanField(default=False)
step4 = models.BooleanField(default=False)
step5 = models.BooleanField(default=False)
step6 = models.BooleanField(default=False)
step7 = models.BooleanField(default=False)
is_verified = models.BooleanField(default=False)
is_published = models.BooleanField(default=False)
我的目标重定向视图是:
def shipping_view(request, order_id):
customer = Customer.objects.filter(usr=request.user).first()
order = Order.objects.filter(order_id=order_id).first()
...
成功重定向后对 TargetView的回溯(以防有人发现它有用)。
问题是:重定向后,回溯说prod is None
,howerverprod
属于product_page_view
,我没有得到callback_kwargs的想法。在 callback_kwargs 中传递给prod_slug 的值(正如回溯所说)是order_id
,它属于shipping_view
. 还,
为什么是回调函数product_page_view
?不应该Shipping_view
吗?
谢谢。
解决方案
实际上你不应该first()
直接使用 withfilter()
方法。没有记录(数据),它将返回无。所以 None 对象没有任何属性
你可以使用这样的过滤方法
...
...
products = Product.objects.filter(slug = prod_slug)
if products.exists(): # True if any record available
prod = products.first()
seller = prod.seller # please try print(seller) after that to check first record
...
...
确保您在模型中有属性卖家。并且您的模型包含至少 1 条记录。
您也可以使用 count() 方法返回它包含的行数。
如果有效,请告诉我。
推荐阅读
- python - 在 Visual Studio Code 中,如何有效地调整 Pyplot 图形?
- overflow - VHDL numeric_std 函数(“+”)
- javascript - 派发更新到商店不再工作
- java - 带有 Enum 对象列表的 Restrictions.in 休眠计数
- roles - Raku 中的参数化类型,如何使用运行时值作为参数
- php - 未找到自动加载类
- c++ - 如何使用多种方法创建异步 gRPC?
- c# - 重定向应用程序后 ASP.Core 5 MVC 会话丢失
- android - 如何决定何时应该将用户搜索存储在历史记录中?
- actionscript-3 - 在 Action Script 3.0 上从 TXT 文件加载代码