【发布时间】:2013-12-31 21:14:25
【问题描述】:
我有一个名为 Progress 的应用。我想在我的项目中让几个不同的应用程序在发生任何事情时写入它。但是所有不同的应用程序在广播进度方面并不相同。所以我认为 ContentType 解决方案会起作用。
我很难弄清楚的唯一技巧是,我需要在事件发生时写入 Progress 应用程序。例如当视图呈现时。我一直在尝试get_or_create,但我无法在查询集中获得正确的配置。有关如何纠正此问题的任何建议?
我希望 get_or_create 位于应用程序的视图中,以便我想要的操作是写入进度的内容。
我的进度模型.py
from django.db import models
from django.template.defaultfilters import slugify
from django.utils.translation import ugettext_lazy as _
from django.contrib.auth.models import User
from django.contrib.contenttypes.models import ContentType
from django.contrib.contenttypes import generic
from datetime import datetime
class Progress(models.Model):
"""
The page log. Records the user and the object.
"""
user = models.ForeignKey(User, related_name='user_pagelog')
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = generic.GenericForeignKey('content_type', 'object_id')
stamp = models.DateTimeField(auto_now_add=True)
class Meta:
unique_together = (('user', 'content_type', 'stamp'),)
verbose_name = 'View Log'
verbose_name_plural = 'View Logs'
get_latest_by = 'stamp'
def __str__(self):
return "%s got to %s on %s" % (self.user, self.content_type, self.stamp)
@classmethod
def get_latest_view(cls, user):
"""
Get most recent view log value for a given user.
"""
try:
view_log = cls.objects.filter(user=user).order_by('-stamp')[0]
return view_log.value
except IndexError:
return None
我要写入 Progress 应用的查询集示例:
Progress.objects.get_or_create(user=request.user, content_type=f.id)
在哪里f = get_object_or_404(Page, publish=True)
最后,我得到的错误:
Cannot assign "1": "Progress.content_type" must be a "ContentType" instance.
我认为这意味着找不到实例?但它存在,所以我很困惑。
谢谢。
【问题讨论】:
标签: django django-models django-views django-contenttypes