处理鹡鸰页面中的浏览量。

问题描述 投票:0回答:1

根据用户跟踪分析,我已经创建了一个跟踪方法,保存TrackUserRest记录并更新Restaurant.view_count。

版本1导入Restaurant模型时弹出错误,版本2保存记录并成功更新view_count数量,但我不知道这样的方法是否正确?

为了进一步加强研究,谁能给我一些例子,让我用正确的方式更新鹡鸰页面?

对不起,我的英文不好。

class RestaurantPage(Page)
    .... #other attribute
    view_count = models.PositiveIntegerField(default=0,
                                             editable=False)

    @property
    def restaurant_page(self):
        return self.get_parent().specific

    def get_context(self, request, *args, **kwargs):
        context = super(RestaurantPage, self).get_context(request, *args, **kwargs)
        context['restaurant_page'] = self.restaurant_page
        context['restaurant'] = self
        self.tracking(request)
        return context

    def tracking(self, request):
        track = TrackUserRest()
        if request.user.is_authenticated:
            track.user_id = request.user.id
        else:
            track.user_id = 0
        track.restaurant_id = self.pk
        track.time = timezone.now()
        track.save()
        self.view_count = self.view_count+1
        return super(RestaurantPage, self).save()
# version 1
# dashboard.models
from accounts.models import ExtendedUser
from restaurant.models import RestaurantPage

class TrackUserRest(models.Model):
    user_id = models.ForeignKey(ExtendedUser, on_delete=models.CASCADE)
    restaurant_id = models.ForeignKey(RestaurantPage, on_delete=models.CASCADE)
    time = models.DateTimeField(auto_now=True, auto_now_add=False)

    class Meta:
        ordering = ('time', )

    def __str__(self):
        return 'Restaurant Tracking system: usee.id({}) viewed rest.id({}) at timezone.({})'.format(self.user,
                                           self.rest.title,
                                           self.time)

#  Error msg
#  File "<path>/restaurant/models.py", line 19, in <module>
#    from dashboard.models import TrackUserRest
#  File "<path>/dashboard/models.py", line 3, in <module>
#    from restaurant.models import RestaurantPage
#  ImportError: cannot import name 'RestaurantPage' from 'restaurant.models' (<path>/restaurant/models.py)
#version 2
# dashboard.models
class TrackUserRest(models.Model):
    user_id = models.PositiveIntegerField(null=True)
    restaurant_id = models.PositiveIntegerField(blank=False, null=False)
    time = models.DateTimeField(auto_now=True, auto_now_add=False)

    class Meta:
        ordering = ('time', )

    def __str__(self):
        return 'Restaurant Tracking system: user.id({}) viewed rest.id({}) at timezone.({})'.format(self.user,
                                           self.rest.title,
                                           self.time)
python django wagtail
1个回答
0
投票

版本1导入失败是因为你有一个循环导入--。TrackUserRest 取决于 RestaurantPage 被定义,但 RestaurantPage 取决于 TrackUserRest 被定义,所以Python没有办法决定哪个先来。

解决这个问题最简单的方法是在定义ForeignKey时,使用一个字符串版本的模型名称,这样就不需要导入RestaurantPage了。

from accounts.models import ExtendedUser

class TrackUserRest(models.Model):
    user_id = models.ForeignKey(ExtendedUser, on_delete=models.CASCADE)
    restaurant_id = models.ForeignKey('restaurant.RestaurantPage', on_delete=models.CASCADE)
    time = models.DateTimeField(auto_now=True, auto_now_add=False)
© www.soinside.com 2019 - 2024. All rights reserved.