【问题标题】:How to get the count of most viewed product?如何获得观看次数最多的产品的数量?
【发布时间】:2018-05-03 09:14:19
【问题描述】:

嗨,实际上我是 django Restframe 工作的新手。 在这里我提到了我的模型我的问题是?我不知道如何存储每个产品的计数。并且浏览次数最多的产品应该显示在前端。

MODEL.PY

class Products(models.Model):
   name = models.CharField(max_length=100)
   image = models.CharField(max_length=10, null=True)
   categories =  models.ArrayModelField(
       model_container=Category,
       model_form_class=CategoryForm
   )
   specifications =  models.ArrayModelField(
       model_container=Specifications,
       model_form_class=SpecificationsForm
   )
   description = models.CharField(max_length=500)
   reviews =  models.ArrayModelField(
       model_container=Reviews,
       model_form_class=ReviewsForm
   )
   drizzly = models.BooleanField(default=False)
   complete = models.BooleanField(default=False)
   comment = models.CharField(max_length=500)
   count = models.IntegerField()

【问题讨论】:

  • 在您的视图中,您可以调用一个函数,每次用户调用该视图时,该函数会将 1 添加到您的 count 模型字段。但问题是,如果用户多次点击产品,它会计算每次点击。因此,要正确执行此操作,您需要保存用户 ID /IP 地址,并且仅在用户从未查看过产品时添加一个...

标签: django django-models django-forms django-rest-framework django-views


【解决方案1】:

最好的方法是使用 atomic operations

from django.db.models import F

Products.objects.filter(name = name).update(count = F('count')+1)

注意:您必须将name 字段设置为unique 或通过另一个unique 字段进行过滤。

【讨论】:

  • 我怀疑是这样的。通过单击计数(值)应存储在计数列(产品型号)中的产品-
  • 没明白你的意思?
  • 其实我想展示最受欢迎的产品。为此,我添加了名为 Count 的列,它应该存储单击 Product 的次数的值。我想显示最受欢迎的产品。
  • Products.objects.all().order_by('-count')[:100]
  • 为此我保留了单独的列计数。所以我想存储在里面。
【解决方案2】:

如果您使用基于类的视图,您可以执行以下操作:

Class ProductsDetailView(DetailView):
    model = Products

    def get(self, **kwargs):
        self.object.count += 1
        self.object.save()
        return super(ProductsDetailView, self).get(**kwargs)

按数量排序,在您的模型中包括

Class Meta:
    ordering = ['count']

【讨论】:

  • 我怀疑是这样的。通过单击计数应存储在计数列(产品型号)中的产品
【解决方案3】:

这对我有用:

类 ProductsDetailView(DetailView): 型号 = 产品

def get(self, request, *args, **kwargs):       
    object = self.get_object()
    object.count = int(object.count) + 1
    object.save()
    return super(ProductsDetailView, self).get(self, request, *args, **kwargs)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 2012-10-01
    • 2019-02-05
    • 2021-09-15
    相关资源
    最近更新 更多