5

내 모델의 내역을 작성하는 데 Django-Simple-History을 사용하기로 결정했습니다. 그걸 사용하여 대시 보드를 만듭니다. 나는 약간의 걸림돌을 만났다. [사용자] [추가, 변경, 삭제] [개체] on/at [시간]에 출력하려고 시도하고 있지만 나는 내 인생에 대해 알아낼 수 없습니다.사용자 정의 대시 보드의 Django 기록

지금까지 템플릿의 기록 레코드를 표시 할 수 있었지만 다른 것을 액세스 할 수 없었습니다. 누락 된 것이 있습니까?

간단한 기록에 대한 지식이있는 사람이 도움을 줄 수 있기를 바랬습니다. 저자를 확보 할 수 없었기 때문입니다.

여기에 제가 지금까지 가지고있는 코드 스 니펫이 있습니다.

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 %} 

사람이 할 수 있다면 도움을 주거나 깊이있는 문서를 좀 더 가르쳐 주시면 좋을 것입니다.

감사합니다.

답변

6

장고 - 간단한 - 역사는 단순히 당신이에 넥타이 객체를 반영하고 네 개의 추가 필드를 추가하는 모델 (및 관련 데이터베이스 테이블)을 생성한다.

history_id : + 중 하나 ~, - : 표준 기본 키

history_date : 변화가

history_type 발생한 때의 날짜.역사는 가장 기본적인 수준에서, 그래서

저장되는 모델의 표현, 당신은 대략 "[추가, 변경 얻을 수 있습니다 이

history_object

( + 수단 ~ 수단을 변경, 추가 및 - 삭제 의미) 의 효과에 뭔가를 사용하여 출력] 시간 [시 /에 [개체] "삭제 : 당신은 아마 변환 템플릿 태그 또는 뭔가를 만들 수 있습니다

{{ h.history_type }} {{ h.history_object }} on/at {{ h.history_date }} 

+, ~하고, - 'Created', 'Changed', 'Deleted'와 같이 더 이해하기 쉽습니다. {{ 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 사전 저장로 채울 수 있습니다. 그런 다음 장고 - 심플 - 히스토리가 그 일을 할 때 그 필드는 나머지와 같이 복사되고 {{ h.modified_by }}을 통해 사용할 수 있습니다.

+1

고마워요, 제가 찾고있는 라인을 따라 더 고마워요. 자세한 답변을 주셔서 감사합니다. 이전에 본 적이 있지만 귀하의 설명은 이전에 본 것보다 낫습니다. – TheLifeOfSteve

1

유일한 문제는 이전 데이터를 표시하는 것이지 실제로 저장하는 것이 아니라고 가정합니다.

프로젝트 모델에 어떤 필드가 있는지 확실하지 않지만 내역 필드가 외래 키 필드처럼 취급됩니다. 이 외래 키의 테이블에는 프로젝트 모델과 동일한 필드가 들어 있습니다. 나는 매우 도움이되었다이 페이지 (http://qr7.com/2010/10/django-simple-history-ftw/)을 발견

... 
{% for h in hist %} 
<ul> 
    <li>{{h.field1}} {{h.field2}} {{h.field3}} on {{h.field4}}</li> 
</ul> 
{% endfor %} 
... 

,하지만 당신은 함께 놀러해야합니다 : 당신은 필드에 액세스하려는 경우, 당신은 템플릿이 뭔가를해야 할 것 히스토리 필드 명 나는 그들이 실제로 무엇인지 잘 모르고 있었다.

희망이 있습니다. history_id, history_date, history_typehistory_object :

관련 문제