首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我如何设置这样的逻辑:“如果用户订购了任何产品,那么用户就能够对该产品提供反馈”?

我如何设置这样的逻辑:“如果用户订购了任何产品,那么用户就能够对该产品提供反馈”?
EN

Stack Overflow用户
提问于 2022-08-05 19:44:17
回答 1查看 34关注 0票数 0

我的动机是设定一个逻辑,比如,用户只能对他/她购买的产品进行产品评审。我在下面试过了,但没成功。

models.py

代码语言:javascript
复制
class Products(models.Model):

    user = models.ForeignKey(User, related_name="merchandise_product_related_name", on_delete=models.CASCADE, blank=True, null=True)
    product_title = models.CharField(blank=True, null=True, max_length = 250)
    
    def __str__(self):
        return str(self.pk) + "." + str(self.product_title)



class ProductOrder(models.Model):

    User = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='UserOrderRelatedName',on_delete=models.CASCADE)
    CustomerName = models.CharField(max_length=250, blank=True, null=True)
    Product = models.ForeignKey(Products, related_name='ProductOrderRelatedName',on_delete=models.CASCADE)
    ProductTitle = models.CharField(max_length=250, blank=True, null=True)

    def __str__(self):
        return f'{self.pk}.{self.User}({self.Product})'

views.py:

代码语言:javascript
复制
def quick_view(request, quick_view_id):

    quick_view = get_object_or_404(Products, pk=quick_view_id)

    context = {
        "quick_view":quick_view,
    }
        
    return render(request, 'quickVIEW_item.html', context)

urls.py:

代码语言:javascript
复制
path('quick_view/<int:quick_view_id>/', views.quick_view, name="quick_view"),

模板:

代码语言:javascript
复制
  {% if quick_view in request.user.UserOrderRelatedName.all %}

            
    <form action="{% url 'feedBack' quick_view_id=quick_view.id %}" method="POST" class="needs-validation mt-3" style="font-size: 13px;" novalidate="" autocomplete="off" enctype="multipart/form-data">
      {% csrf_token %}

      <textarea id="email" placeholder="Share your experiencs..." rows="10" style="font-size: 13px;" type="email" class="form-control" name="feedBACK" value="" required></textarea>

          
      <button type="submit" class="btn btn-outline-dark ms-auto" style="font-size: 13px;">
          Submit
      </button>

    </form>

  {% endif %}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-05 20:37:56

问题是用户和产品是通过ProductOrder连接的,这使得在没有for-循环的情况下很难通过模板反向访问器访问(如果不是不可能的话)。您应该在视图中设置一个变量,并将其传递给模板:

代码语言:javascript
复制
products_bought_by_user = Product.objects.filter(
    ProductOrderRelatedName__user=request.user
)
if quick_view in products_bought_by_user:
    user_has_bought_product = True 
else:
    user_has_bought_product = False
...

然后,您可以在模板中轻松地使用它:

代码语言:javascript
复制
{% if user_has_bought_product %}
# your form
{% endif %}

此外,使用视图意味着您可以验证服务器端是否有人能够发布评论--目前它只是取决于HTML表单是否可见。

代码语言:javascript
复制
if user_has_bought_product:
    # process posted review
else:
    return redirect('access-denied-or-something')
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73254625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档