2

我在我的项目中使用Django 简单历史来存储 LogEntry。我有使用Django 休息框架(DRF)的 API 构建和使用 Angularjs 的前端。对象的 LogEntry 历史保存没有任何问题,如下图所示!

在此处输入图像描述

模型.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

我可以毫无问题地从 django admin 访问对象历史记录。但是, 如何从 Django 管理员访问外部的 LogEntry 历史记录?我想序列化日志查询集并以 json 格式返回响应。

到目前为止我知道和做过什么?

from person.models import Person
from datetime import datetime

>>> person = Person.objects.all()
>>> person.history.all()
4

2 回答 2

2

您可以使用 ListView 检索数据。

假设您的 django-simple-history 配置正确,请按照以下步骤操作:

模型模型.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

模板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>
于 2018-01-12T16:34:29.087 回答
0

像这样制作自己的历史序列化器...

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)
于 2017-01-10T08:00:17.713 回答