2016-10-04 5 views
0

Я использую Django simple history в моем проекте для хранения LogEntry. У меня есть API, используя Django rest framework (DRF) и front-end с помощью Angularjs. История LogEntry для объектов сохраняется без проблем, как показано ниже на картинке!Доступ к журналу простой истории Django вне администратора?

enter image description here

models.py

from datetime import datetime 
from django.db import models 
from simple_history.models import HistoricalRecords 


class Person(models.Model): 

    """ Person model""" 

    first_name = models.CharField(max_length=255) 
    last_name = models.CharField(max_length=255) 
    workphone = models.CharField(max_length=15, blank=True, default='') 
    avatar = models.FileField(upload_to="", blank=True, default='') 
    createdtstamp = models.DateTimeField(auto_now_add=True) 
    history = HistoricalRecords(inherit=True) 


    def __unicode__(self): 
     return "%s" % self.first_name 

я могу получить доступ к истории объекта от Джанго администратора без каких-либо проблем. Но, Как я могу получить доступ к истории LogEntry за пределами администратора Django? Я хочу, чтобы Serialize logs queryset и возвращаемый ответ в json-формате.

Что я знаю и что делаю до сих пор?

from person.models import Person 
from datetime import datetime 

>>> person = Person.objects.all() 
>>> person.history.all() 
+0

Это звучит как код это для меня вопрос банкоматом. Пожалуйста, приложите все усилия. – e4c5

+0

Я пересмотрел и попробовал свои лучшие @ e4c5! – MysticCodes

ответ

0

сделать свой собственный historyserializer как это ...

class HistorySerializer(serializers.ModelSerializer): 
    class Meta: 
     model=Person 

, а затем в своих взглядах ...

class HistoryViewset(viewsets.ModelViewSet): 
    queryset = Person.objects.all() 
    serializer_class = HistorySerializer 

    @list_route(methods=["GET", "POST"]) 
    def history(self,request): 
     var=Person.history.all() 
     serialized_data=HistorySerializer(var,many=True) 
     return Response(serialized_data.data) 
0

вы можете получить данные с помощью ListView.

Предполагая, что ваш Джанго-простая история настроена правильно, следуйте приведенным ниже:

Модели models.py

from django.db import models 
from simple_history.models import HistoricalRecords 

# Create your models here. 

class Poll(models.Model): 
    question = models.CharField(max_length=200) 
    history = HistoricalRecords() 

Посмотреть views.py

from django.shortcuts import render 
from django.views.generic import ListView 
from .models import Poll 

# Create your views here. 

class PollHistoryView(ListView): 
    template_name = "pool_history_list.html" 
    def get_queryset(self): 
     history = Poll.history.all() 
     return history 

Template pool_history_list.html

<table> 
    <thead> 
     <tr> 
      <th>Question</th> 
      <th>History Date/Time</th> 
      <th>History Action</th> 
      <th>History User</th> 
     </tr> 
    </thead> 
    <tbody> 
     {% for t in object_list %} 
     <tr> 
      <td>{{ t.id }}</td> 
      <td>{{ t.question }}</td> 
      <td>{{ t.history_date }}</td> 
      <td>{{ t.get_history_type_display }}</td> 
      <td>{{ t.history_user }}</td> 
     </tr> 
     {% endfor %} 
    </tbody> 
</table>