Django 是否在wagtail上创建自定义用户钉扎方法?

Django 是否在wagtail上创建自定义用户钉扎方法?,django,analysis,wagtail,Django,Analysis,Wagtail,我被跟踪创建了一些模型。对于用户活动分析,我想保存用户id、餐厅id和访问餐厅页面的时间。 逻辑是在餐馆模型中获取上下文函数时,它将使用跟踪函数在TrackUserRestaurant模型中保存记录 打印功能用于检查request.user.id和restaurant.id 但是我不能在TrackUserRestaurant模式上获得任何新记录 我误解了什么吗 我不熟悉Django和wagtail class RestaurantPage(Page) .... #other fields

我被跟踪创建了一些模型。对于用户活动分析,我想保存用户id、餐厅id和访问餐厅页面的时间。 逻辑是在餐馆模型中获取上下文函数时,它将使用跟踪函数在TrackUserRestaurant模型中保存记录

打印功能用于检查request.user.id和restaurant.id

但是我不能在TrackUserRestaurant模式上获得任何新记录

我误解了什么吗

我不熟悉Django和wagtail

class RestaurantPage(Page)
    .... #other fields
    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):
        current_user = request.user
        track = TrackUserRest
        track.user_id = 0
        track.restaurant_id = self.pk
        track.time = timezone.now()
        if request.user.id != None:
            print('user id:' + str(current_user.id))
            track.user = request.user.pk
        print('rest id:' + str(self.pk))
        return track.save(self)
  • tracking
    方法(
    TrackUserRest
    rest
    )中使用的名称与类定义不匹配(
    TrackUserRestaurant
    restaurant\u id
  • track=TrackUserRest
    不会创建
    TrackUserRest
    对象-它需要是
    track=TrackUserRest()
    。因此,以下几行是在
    TrackUserRest
    类上设置属性,而不是
    TrackUserRest
    对象
  • 有了这个固定选项,
    track.save(self)
    应该变成
    track.save()

  • 谢谢你的帮助。我编辑了属性,最后使用track.save()。如果我想更新RestautrantPage的view_count属性,我可以问更多的问题吗。我在跟踪fcuntion
    self.view\u count=self.view\u count+1 return super(RestuarantPage,self).save()中添加了一些代码,它可以用于更新金额,但我不确定这是否是一种正确的方法?最好将其作为一个新问题发布。在Wagtail页面模型上设置这样的字段可能会变得复杂,因为Wagtail如何存储页面的草稿版本-您需要确保发布新版本不会覆盖以前的视图计数。
    
    class TrackUserRestaurant(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_id,
                                               self.restaurant_id,
                                               self.time)