点击次数/页面浏览功能Django应用程序

2024-10-08 19:26:21 发布

您现在位置:Python中文网/ 问答频道 /正文

有人问了这个问题,大多数人建议使用django hitcounthttps://pypi.org/project/django-hitcount/

我试过那种解决办法。但该解决方案是用于Python2的。不是Python3使用的。尝试该解决方案时,我遇到了本文中描述的错误: Django Hit Count ImportError

所以我尝试创建这个功能。我有一个拍卖品模型。我在其他字段中保留viewCount:

models.py

from django.db import models
from django.contrib.auth.models import User
from PIL import Image
from django.utils import timezone

class AuctionItem(models.Model):

    seller = models.ForeignKey(User, on_delete=models.CASCADE)
    image = models.ImageField(default='default.jpg', upload_to='auction_items')
    title = models.CharField(max_length=100)
    description = models.TextField()

    startBid = models.FloatField()
    buyNowPrice = models.FloatField()
    buyNowEnabled = models.BooleanField()
    deliveryCost = models.FloatField()

    startDate = models.DateTimeField(default=timezone.now)
    endDate =  models.DateTimeField(default=timezone.now)

    viewCount=models.IntegerField(default=0)

    def __str__(self):
        return self.title

    def save(self):
        super().save()

        img = Image.open(self.image.path)

        if img.height > 300 or img.width > 300:
            output_size = (300, 300)
            img.thumbnail(output_size)
            img.save(self.image.path)

    def getCurrentTopBid():
        return startBid

    def incrementViewCount(self):
        self.viewCount += 1
        self.save()

我有一个基于类的视图类AuctionItemDetailView(DetailView),用于“拍卖项目详细信息”视图,在该视图中,我试图通过调用incrementViewCount()来增加模型中的viewCount

views.py

from django.shortcuts import render, get_object_or_404
from django.contrib.auth.mixins import (
    LoginRequiredMixin, 
    UserPassesTestMixin
)
from django.contrib.auth.models import User
from django.views.generic import (
        ListView, 
        DetailView, 
        CreateView,
        UpdateView,
        DeleteView,

        )

from .models import AuctionItem

class AuctionItemListView(ListView):
    model = AuctionItem               #looks dir of app name   #template  #view
    template_name = 'auctionitem/auctionitem_list.html' #<app>/<model>_<viewtype>.html
    context_object_name = 'auctionitems'
    ordering = ['-startDate']
    paginate_by = 2

class UserAuctionItemListView(ListView):
    model = AuctionItem                #looks dir of app name   #template  #view
    template_name = 'auctionitem/user_auctionitems.html' #<app>/<model>_<viewtype>.html
    context_object_name = 'auctionitems'
    ordering = ['-date_posted']
    paginate_by = 2

    def get_queryset(self):
        user = get_object_or_404(User, username=self.kwargs.get('username'))
        return AuctionItem.objects.filter(seller=user).order_by('-startDate')

class AuctionItemDetailView(DetailView):
    model = AuctionItem
    model.incrementViewCount()

class AuctionItemCreateView(LoginRequiredMixin, CreateView):
    model = AuctionItem
    fields = ['image', 'title', 'description', 'startBid', 'buyNowPrice', 'buyNowEnabled', 'startDate', 'endDate', 'deliveryCost', 'seller']
    success_url ='/'
    def form_valid(self,form):
        form.instance.seller = self.request.user
        return super().form_valid(form)

class AuctionItemUpdateView(LoginRequiredMixin,UpdateView):
    model = AuctionItem
    fields = ['title', 'description', 'startBid', 'buyNowPrice', 'buyNowEnabled', 'startDate', 'deliveryCost', 'seller']


    def form_valid(self,form):
        form.instance.seller = self.request.user
        return super().form_valid(form)

        def test_func(self):
            post = self.get_object()
            if self.request.user == auctionitem.seller:
                return True
            return False

class AuctionItemDeleteView(LoginRequiredMixin,UserPassesTestMixin, DeleteView):
    model = AuctionItem
    success_url ='/'

    def test_func(self):
            post = self.get_object()
            if self.request.user == auctionitem.seller:
                return True
            return False

但当我运行服务器时,会出现以下错误:

TypeError: incrementViewCount() missing 1 required positional argument: 'self'

我尝试传递“self”,但出现以下错误:

NameError: name 'self' is not defined

我怎样才能做到这一点? 谢谢 铁人


Tags: djangonamefromimportselfformgetmodel
1条回答
网友
1楼 · 发布于 2024-10-08 19:26:21

在您的AuctionItemDetail视图中

def get(self, request, *args, **kwargs):
    res = super().get(request, *args, **kwargs)    
    self.object.incrementViewCount()
    return res

相关问题 更多 >

    热门问题