如何从 Django 中基于类的详细信息视图中获取当前对象/产品?

萨普托什达斯
'''Models Code'''
# Product Model
class Products(models.Model):
    name = models.CharField(max_length=50)
    img = models.ImageField(upload_to='productImage')
    CATEGORY = (
        ('Snacks','Snacks'),
        ('Juice','Juice'),
    )
    category = models.CharField(max_length=50, choices=CATEGORY)
    description = models.TextField()
    price = models.FloatField()
# Rating Model
class Rating(models.Model):
    product = models.ForeignKey(Products, on_delete=models.CASCADE)
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    stars = models.IntegerField(validators=[MinValueValidator(1),MaxValueValidator(5)], blank=True, null=True)
    comment = models.TextField(blank=True,null=True)

''' Views Code '''

class ProductListView(ListView):
    model = Products
    template_name = 'products.html'
    context_object_name ='Products'


class ProductDetailView(LoginRequiredMixin,DetailView):
    login_url = '/accounts/login'
    model = Products

# Using this function I want to take the rating and comment, but how can I access the cuurent object for which the comment and rating is being send by the user.
def review(request,slug):
    star=request.POST.get('rating')
    comment=request.POST.get('comment')
    user = request.user
    productId = request.POST.get('productsid') # How to get the Product
    product = Products.objects.get(id=productId)
    review = Rating(product=product,user=user,stars=star,comment=comment)
    review.save()
    return redirect('/')

# Urls code
urlpatterns = [
  path('',views.home,name='Home'),
  path('products',ProductListView.as_view(),name='Products'),
  path('product/<int:pk>',ProductDetailView.as_view(),name='Product-Details'),
  path('contact',views.contact,name='Contact'),
  path('review',views.review,name='review')

#Templates Code
<form method="POST" action="review">
{% csrf_token %}
<input type="hidden" id="rating-value" name="rating">
<textarea  style="margin-top:5px;" class="form-control" rows="3" id="comment" placeholder="Enter your review" name="comment"></textarea>
<button type="submit" style="margin-top:10px;margin-left:5px;" class="btn btn-lg btn-success">Submit</button>
</form>

如何从评论功能中的详细视图页面中获取当前对象?我在这里添加了代码。在产品详细视图页面中,它正在呈现我想要对产品进行评级和评论的页面。有没有其他方法可以获取产品、用户、星级和评级字段值并将其存储在数据库中?

萨尼普

我可以指出一些方法来检索product_id您的review函数中的 。

第一种方法:

您可以将 传递product_id为 URL 参数。在这种情况下,我希望review从产品详细信息页面调用视图。

所以,你的网址应该是这样的:

path('review/<int:product_id>', views.review, name="review),

您的观点:

def review(request, *args, **kwargs):
    star=request.POST.get('rating')
    comment=request.POST.get('comment')
    user = request.user
    productId = kwargs.get('product_id') # change is here
    product = Products.objects.get(id=productId)
    review = Rating(product=product,user=user,stars=star,comment=comment)
    review.save()
    return redirect('/')

您的模板:

<form method="POST" action="{% url 'review' object.pk %}">
{% csrf_token %}
<input type="hidden" id="rating-value" name="rating">
<textarea  style="margin-top:5px;" class="form-control" rows="3" id="comment" placeholder="Enter your review" name="comment"></textarea>
<button type="submit" style="margin-top:10px;margin-left:5px;" class="btn btn-lg btn-success">Submit</button>
</form>

在模板中,object是您为产品对象提供的 object_name。您可以通过添加以下内容来更改对象名称:

context_object_name = product

在您的ProductDetailView.

第二种方法:

将 product_id 作为表单数据传递。您可以在模板中创建一个包含 product_id 作为值的隐藏输入。例如:

在您的模板中:

<form method="POST" action="review">
{% csrf_token %}
<input type="hidden" id="rating-value" name="rating">
<input type="hidden" name="product_id" value="{{ object.pk }}"> # add a hidden input field
<textarea  style="margin-top:5px;" class="form-control" rows="3" id="comment" placeholder="Enter your review" name="comment"></textarea>
<button type="submit" style="margin-top:10px;margin-left:5px;" class="btn btn-lg btn-success">Submit</button>
</form>

object我之前提到的在哪里

然后,您可以在视图中检索 product_id 为:

def review(request,slug):
    star=request.POST.get('rating')
    comment=request.POST.get('comment')
    user = request.user
    productId = int(request.POST.get('product_id')) # here
    product = Products.objects.get(id=productId)
    review = Rating(product=product,user=user,stars=star,comment=comment)
    review.save()
    return redirect('/')

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何从详细信息页面Angular 9中的单个对象(本地JSON)获取详细信息

如何在基于Django类的视图中获取表单的提交值?

如何在基于Django类的视图中访问当前用户

如何在Django中获取超级用户详细信息?

如何为Django详细信息视图添加页面视图计数?

Django:如何在管理员详细信息视图中过滤外键

如何在Java HashMap中基于产品类别获取产品详细信息?

如何在.net中获取ForeignSecurityPrincipal对象的详细信息

如何将对象从详细信息视图发送到Django中的另一个视图?

如何基于其属性ID从数组中获取特定项目/对象的详细信息-React

如果找不到Django REST框架的详细信息,如何在ModelViewSet类中修改错误响应?

如何在Django中基于类的视图中按日期修复对象排列

详细信息视图中的上一个页面的详细信息视图-Django

Django:如何在基于类的视图中获取登录用户的用户名?

在Django中基于类的视图中使用post保存表单时如何保存用户

如何在magento中获取当前产品的类别名称(在产品详细信息页面上)

如何在Android中获取“当前周”详细信息以及“季度详细信息”?

如何在基于Django类的视图中从URL获取keword参数?

如何从Django中另一个基于类的视图中返回基于类的视图的结果?

如何在Django Rest Framework可浏览API中显示对象详细信息?

Django-如何在视图中获取当前项目

如何在基于类的视图中获取当前登录的用户?

Django 1.8 如何通过当前通用详细信息视图的 id 过滤对象

如何在基于 Django 类的视图中执行计算?

如何从restful api django获取详细信息?

如何从 Django rest 框架中基于类的视图中获取一些过滤结果?

如何在视图集中获取登录的用户详细信息 - django

如何在基于 Django 类的视图中更改模板

如何解决“详细信息”:“未提供身份验证凭据。” 基于类的 APIView Django REST 框架的错误?