如何从django中基于类的详细视图中获取当前对象/产品? “模型代码” #产品模型 类别产品(型号.型号): name=models.CharField(最大长度=50) img=models.ImageField(上传到='productImage') 类别=( (‘零食’,‘零食’), (‘果汁’,‘果汁’), ) category=models.CharField(最大长度=50,选项=category) description=models.TextField() price=models.FloatField() #评级模型 等级评定(型号.型号): product=models.ForeignKey(产品,on_delete=models.CASCADE) user=models.ForeignKey(用户,on_delete=models.CASCADE) stars=models.IntegerField(验证器=[MinValueValidator(1),MaxValueValidator(5)],blank=True,null=True) comment=models.TextField(blank=True,null=True) “视图代码” 类ProductListView(ListView): 型号=产品 模板名称='products.html' 上下文\u对象\u name='Products' 类ProductDetailView(LoginRequiredMixin,DetailView): login_url='/accounts/login' 型号=产品 #使用此函数,我希望获得评级和评论,但如何访问用户正在为其发送评论和评级的cuurent对象。 def审查(请求、slug): star=request.POST.get('rating') comment=request.POST.get('comment') user=request.user productId=request.POST.get('productsid')#如何获取产品 product=Products.objects.get(id=productId) 审查=评级(产品=产品,用户=用户,星级=星级,评论=评论) review.save() 返回重定向(“/”) #URL代码 URL模式=[ 路径(“”,views.home,name='home'), 路径('products',ProductListView.as_view(),name='products'), 路径('product/',ProductDetailView.as_view(),name='product-Details'), 路径('contact',view.contact,name='contact'), 路径('review',views.review,name='review') #模板代码 {%csrf_令牌%} 提交

如何从django中基于类的详细视图中获取当前对象/产品? “模型代码” #产品模型 类别产品(型号.型号): name=models.CharField(最大长度=50) img=models.ImageField(上传到='productImage') 类别=( (‘零食’,‘零食’), (‘果汁’,‘果汁’), ) category=models.CharField(最大长度=50,选项=category) description=models.TextField() price=models.FloatField() #评级模型 等级评定(型号.型号): product=models.ForeignKey(产品,on_delete=models.CASCADE) user=models.ForeignKey(用户,on_delete=models.CASCADE) stars=models.IntegerField(验证器=[MinValueValidator(1),MaxValueValidator(5)],blank=True,null=True) comment=models.TextField(blank=True,null=True) “视图代码” 类ProductListView(ListView): 型号=产品 模板名称='products.html' 上下文\u对象\u name='Products' 类ProductDetailView(LoginRequiredMixin,DetailView): login_url='/accounts/login' 型号=产品 #使用此函数,我希望获得评级和评论,但如何访问用户正在为其发送评论和评级的cuurent对象。 def审查(请求、slug): star=request.POST.get('rating') comment=request.POST.get('comment') user=request.user productId=request.POST.get('productsid')#如何获取产品 product=Products.objects.get(id=productId) 审查=评级(产品=产品,用户=用户,星级=星级,评论=评论) review.save() 返回重定向(“/”) #URL代码 URL模式=[ 路径(“”,views.home,name='home'), 路径('products',ProductListView.as_view(),name='products'), 路径('product/',ProductDetailView.as_view(),name='product-Details'), 路径('contact',view.contact,name='contact'), 路径('review',views.review,name='review') #模板代码 {%csrf_令牌%} 提交,django,django-models,django-views,django-templates,django-class-based-views,Django,Django Models,Django Views,Django Templates,Django Class Based Views,如何在review函数中从Detailed view页面获取当前对象? 我在这里添加了代码。在产品详细视图页面中,它呈现了我想要对产品进行评级和评论的页面。是否有其他方法可以获取产品、用户、星级和评级字段值并将其存储在数据库中?我可以指出一些方法来检索产品idIn您的查看功能 第一种方法: 您可以将product\u id作为URL参数传递。在这种情况下,我希望从产品详细信息页面调用review视图 因此,您的url应该类似于: '''Models Code''' # Product Model

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

我可以指出一些方法来检索
产品id
In您的
查看功能

第一种方法:

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

因此,您的url应该类似于:

'''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>
您的模板:

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('/')
context_object_name = product
在您的
ProductDetailView

第二种方法:

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

在模板中:

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('/')
context_object_name = product
<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>
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('/')