我已决定使用Django-Simple-History来构建模型的历史记录。反过来使用它来构建仪表板。我遇到了一些障碍。我正试图在[时间]输出[用户] [添加,更改,删除] [对象],但我无法理解我的生活。
到目前为止,我能够在模板上显示历史记录,但我无法访问任何其他内容,我错过了什么?
我希望有简单历史知识的人可以提供帮助,因为我无法掌握作者。
这是我到目前为止的代码片段。
Models.py
from simple_history.models import HistoricalRecords
class Project(django.db.models.Model):
...
history = HistoricalRecords()
Views.py
@login_required
def addTMProject(request):
user = request.user
if request.method == 'POST':
form = TimeMaterialsForm(request.POST)
if form.is_valid():
project = form.save(commit=False)
project.created_by = request.user
today = datetime.date.today()
project.pre_quote = "%s-" % (str(today.year)[2:4])
project.quote = Project.objects.latest().quote+1
project.save()
project.history.all()
...
我还在我的仪表板/ views.py上传递了它,所以我可以访问它。
@login_required
def view_dash(request):
today = datetime.date.today()
user = request.user
proj_perm = user.has_perm('project.add_project')
project = Project.objects.all().order_by('-proj_name')
query = Project.objects.all().order_by('-id')[:5]
que_quotes = Project.objects.filter(status__value__exact = 'Quote')
expired = FollowUp.objects.filter(next_followup__lte=today).order_by('next_followup').filter(archived=False)
log = LogEntry.objects.select_related().all().order_by("-id")
hist = Project.history.all()
return render_to_response('dashboard/home.html', {'user': user, 'project': project, 'query':query, 'que_quotes':que_quotes, 'expired':expired,
'proj_perm':proj_perm, 'log': log, 'hist':hist,}, context_instance=RequestContext(request))
最后是我模板中的一个片段。就像现在一样,{{h}}在模板上显示“从2011-04-29 10:43:57开始测试简单记录”
home.html的
{% if user.is_authenticated %}
<div id="large_box">
<h5>Activity</h5>
{% for h in hist %}
<ul>
<li>{{ h }}</li>
</ul>
{% endfor %}
如果有人可以提供帮助或指出更深入的文档,那就太棒了!
谢谢大家!
答案 0 :(得分:7)
Django-Simple-History只是创建一个模型(和相关的数据库表),它反映了你绑定它的对象,并添加了四个额外的字段:history_id
,history_date
,history_type
,和history_object
。
history_id
:标准主键
history_date
:发生更改的日期时间
history_type
:+
,~
,-
之一。 (+
表示已添加,~
表示已更改,-
表示已删除)
history_object
:为
所以,在最基本的层面上,你可以粗略地在你的输出中获得“[添加,更改,删除] [对象] / [时间]”,使用以下效果:
{{ h.history_type }} {{ h.history_object }} on/at {{ h.history_date }}
您可能想要创建模板标记或其他内容,以便将+
,~
和-
转换为更易理解,'已创建','已更改','已删除”。我假设{{ h.history_object }}
应该返回对象__unicode__
,因此您可能需要在那里进行一些修改或返回{{ h.history_object.__class__ }}
或{{ h.history_object._meta.verbose_name }}
之类的内容。 (不确定这些内容是否会在实际中有效。)当然,您可以将date
过滤器应用于{{ h.history_date }}
,以使其成为您想要的任何格式。
让用户更加困难。 Django-Simple-History似乎不存储这些数据,因此没有用户进行修改的记录。但是,由于它基本上复制了存在的对象,因此您可能会在模型中添加modified_by
字段并使用request.user
预存储来填充该字段。然后,当Django-Simple-History发挥作用时,该字段将像其他字段一样被复制,并可通过{{ h.modified_by }}
获得。
答案 1 :(得分:1)
我假设您遇到的唯一问题是显示历史数据而不是实际的保存部分。
我不确定您在Project模型中有哪些字段,但看起来历史字段被视为外键字段。此外键的表包含与Project模型相同的字段。因此,如果您想访问这些字段,您必须在模板中执行以下操作:
...
{% for h in hist %}
<ul>
<li>{{h.field1}} {{h.field2}} {{h.field3}} on {{h.field4}}</li>
</ul>
{% endfor %}
...
我发现此页面(http://qr7.com/2010/10/django-simple-history-ftw/)非常有帮助,但您必须使用历史记录字段名称。我不太确定他们到底是什么。
希望有所帮助。