【问题标题】:How To Render An Object In Django Views?如何在 Django 视图中渲染对象?
【发布时间】:2019-09-04 07:52:15
【问题描述】:

我有一个接受 URL 的表单。然后使用 BS4 解析此 URL,并使用以下类创建产品:

class Product(models.Model):
    product_id = models.CharField(max_length=50)
    pub_date = models.DateTimeField(default=datetime.now)
    title = models.CharField(max_length=255)
    url = models.TextField()
    price = models.FloatField()

我只想将独特的产品保存到数据库中。因此,我在 views.py 文件中的 add 函数中添加了以下代码,以通过产品 ID 来检查产品:

def add(request):
    ...
    product.product_id = soup.find('h1', class_='product-id').text
    if Product.objects.filter(product_id=product.product_id):
        return render(request, 'product/add.html', {'error': 'Product already exists'})
    else:
        product.title = soup.find('h1', class_='product-name').text
        ...
        product.save()
        return redirect('/product/' + str(product.id))

目前,用户收到“产品已存在”错误消息。但我想实际渲染已经存在的产品。以下是详细产品的功能:

def detail(request, product_id):
    product = get_object_or_404(Product, pk=product_id)
    return render(request, 'product/detail.html', {'product': product})

详细产品的 URL 如下所示:http://example.com/product/22 可能有更好的方法来检索、比较然后渲染对象。请告诉我。提前致谢!

【问题讨论】:

    标签: python django postgresql django-models beautifulsoup


    【解决方案1】:

    您可以直接重定向到产品定义的 get_absolute_url 属性吗?

    def add(request):
        ...
        product.product_id = soup.find('h1', class_='product-id').text
        existing_product = Product.objects.filter(product_id=product.product_id)
        if existing_product:
            return redirect(existing_product.get_absolute_url())
    

    【讨论】:

    • 谢谢。但是看起来我们必须找到另一种方法来查找现有产品,因为现在我收到以下错误:'QuerySet' object has no attribute 'get_absolute_url'。
    • 你需要在你的模型中定义get_absoute_url:docs.djangoproject.com/en/2.2/ref/models/instances/…
    猜你喜欢
    • 2015-02-04
    • 2020-04-02
    • 1970-01-01
    • 1970-01-01
    • 2019-07-06
    • 2018-12-13
    • 1970-01-01
    • 1970-01-01
    • 2018-08-06
    相关资源
    最近更新 更多