【问题标题】:AttributeError on successful redirection in django?django中成功重定向的AttributeError?
【发布时间】:2020-11-01 01:35:37
【问题描述】:

来自主机视图的成功 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}))
    ...

Host view 和 Target View 的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()
    ...

Traceback on TargetView after successful redirection(万一有人觉得它有用)。

问题是重定向后,回溯​​说prod is None,但是prod属于product_page_view,我没有了解 callback_kwargs 的想法。传递给 callback_kwargs 中 prod_slug 的值(正如回溯所说)是 order_id,它属于 shipping_view。还有,

为什么是回调函数product_page_view?不应该是Shipping_view吗?

谢谢。

【问题讨论】:

  • 请分享您的产品型号。
  • 请检查@DevangHingu
  • 检查您是否从该行收到正确的响应(确保它不是空对象)Product.objects.filter(slug=prod_slug).first()
  • 是的,它确实至少有一个要呈现的响应。此外,问题主要在于重定向视图。我分享了回溯的截图(如果有帮助的话)。 @ansuman
  • 我认为问题出在prod。正如您在堆栈跟踪中的本地变量中看到的那样,它将prod 列为None 因此出现此错误,尝试通过更改为Product.objects.get(slug=prod_slug) 来获取产品

标签: django django-models django-forms django-views django-templates


【解决方案1】:

实际上你不应该直接使用first()filter() 方法。没有记录(数据),它将返回无。所以 None 对象没有任何属性 seller

你可以像这样使用过滤方法

...
...
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

...
...

确保您在模型中具有 seller 属性。并且您的模型包含至少 1 条记录
您也可以使用 count() 方法返回它包含的行数。

如果有效,请告诉我。

【讨论】:

  • 当您的模型包含 1 个或多个然后 1 记录您的 -> Product.objects.filter(slug=prod_slug).first() 将起作用
  • 问题主要在于重定向视图。我分享了回溯的截图(如果有帮助的话)。谢谢
  • @dixitgpta 但错误显示它与 prod 变量存在问题,该变量无法获取类型对象。谢谢
  • 嘿,Devang,我改进了我的问题。希望它可以帮助您更好地理解我的问题。谢谢
猜你喜欢
  • 1970-01-01
  • 2015-05-18
  • 1970-01-01
  • 2016-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-11
  • 1970-01-01
相关资源
最近更新 更多