如何从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_令牌%} 提交
如何在review函数中从Detailed view页面获取当前对象?如何从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
我在这里添加了代码。在产品详细视图页面中,它呈现了我想要对产品进行评级和评论的页面。是否有其他方法可以获取产品、用户、星级和评级字段值并将其存储在数据库中?我可以指出一些方法来检索
产品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('/')