Как получить последнюю запись запроса, используя pyorient OGM в django rest framework? - PullRequest
0 голосов
/ 24 июня 2019

Я не знаю, как получить последнюю запись ребра в django rest framework, используя pyorient OGM.

Я использую pyorient == 1.5.5 и версию OrientDB 3.0.18.

У меня есть отношение (край), называемое OFriends, и вот что я пробовал:

queryset = graph.ofriends.query()

(Pdb) dir (график) ['WhatFunction', 'WhatFunctions', ' class ', ' delattr ', ' dict ', ' dir ', ' doc ',' eq ',' format ',' ge ',' getattribute ',' getitem ',' gt ',' hash ',' init ',' iter ',' le ',' len ',' lt ',' module ',' ne ',' новый ',' уменьшите ',' redu_ex ',' repr ',' setattr ',' sizeof ',' str ',' subclasshook ',' weakref ',' _class_props ',' _graph ',' _params ' , _subquery, all, append_what_function, arithmetic_string, build_optional_clauses, build_props, build_select, build_what, count, count, filter, filter_by, filter_string »,« first »,« group_by »,« let »,« limit »,« lock »,« one »,« order_by »,« parse_prop_name »,« parse_record_prop »,« prepare »,« rid_lower »,« sanitise_prop_ name ',' scalar ',' skip ',' slice ',' source_name ',' sub ',' unique_prop_name ',' unwind ',' what ',' what_args ']

Я думал, что используя limit (), как показано ниже:

queryset = graph.ofriends.query().limit(1)

Получит мне последнюю запись, но это все еще запрос:

И повторяя это:

(Pdb) [print(i.aux_id) for i in queryset]
10
12
100
[None, None, None]

Он возвращает мне все значения, а не последнее.

settings.py

from pyorient.ogm import Graph, Config
from pyorient.serializations import OrientSerialization
from pyorient.ogm import declarative

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

config = RawConfigParser()
config.read(BASE_DIR + '/settings.ini')

DATABASES = {
    'default': {
        'ENGINE': config.get('postgresdbConf', 'DB_ENGINE'),
        'NAME': config.get('postgresdbConf', 'DB_NAME'),
        'USER': config.get('postgresdbConf', 'DB_USER'),
        'PASSWORD': config.get('postgresdbConf', 'DB_PASS'),
        'HOST': config.get('postgresdbConf', 'DB_HOST'),
        'PORT': config.get('postgresdbConf', 'DB_PORT'),
    },
    'orientdb': {
        'NAME': config.get('orientdbConf', 'DB_NAME'),
        'USER': config.get('orientdbConf', 'DB_USER'),
        'PASSWORD': config.get('orientdbConf', 'DB_PASS'),
        'HOST': config.get('orientdbConf', 'DB_HOST'),
        'PORT': config.get('orientdbConf', 'DB_PORT'),
    }
}
Config.from_url('plocal://'+DATABASES['orientdb']['HOST']+':'+str(DATABASES['orientdb']['PORT'])+'/'+DATABASES['orientdb']['NAME']+'',''+DATABASES['orientdb']['USER']+'', ''+DATABASES['orientdb']['PASSWORD']+'',initial_drop=False,serialization_type=OrientSerialization.Binary)
graph = Graph(Config.from_url(''+DATABASES['orientdb']['HOST']+'/'+DATABASES['orientdb']['NAME']+'',''+DATABASES['orientdb']['USER']+'', ''+DATABASES['orientdb']['PASSWORD']+'',initial_drop=False))
Node = declarative.declarative_node()
Relationship = declarative.declarative_relationship()

models.py

from core.settings import Node,Relationship,graph
from pyorient.ogm.property import (String, Date, DateTime, Decimal, Double,
    Integer, Boolean, EmbeddedMap, EmbeddedSet,Link, UUID)

class OFriends(Relationship):
    label = 'ofriends'
    aux_id=Integer(nullable=False,unique=True)
    from_postgresql_ouser_id=Integer(nullable=False,unique=True)
    to_postgresql_ouser_id=Integer(nullable=False,unique=True)

graph.create_all(Node.registry)
graph.create_all(Relationship.registry)

serializers.py

from .models import (OFriends)
from rest_framework import serializers

class OFriendsSerializer(serializers.Serializer):
    aux_id = serializers.IntegerField()
    from_postgresql_ouser_id = serializers.IntegerField()
    to_postgresql_ouser_id = serializers.IntegerField()

    def create(self, data):
        return OFriends.objects.create(**data)

    def update(self, instance, data):
        instance.aux_id = data.get("aux_id")
        instance.from_postgresql_ouser_id = data.get("from_postgresql_ouser_id")
        instance.to_postgresql_ouser_id = data.get("to_postgresql_ouser_id")
        instance.save()
        return instance

api.py

class OFriendsViewSet(viewsets.ModelViewSet):

    def create(self,request):
        queryset = graph.ofriends.query()
        # HERE is where I want to get the last aux_id

Я также пытался использовать order_by (), но я получаю эту ошибку:

queryset = graph.ofriends.query().order_by('aux_id')
(Pdb) [print(i.aux_id) for i in queryset]
*** AttributeError: 'str' object has no attribute 'context_name'

Итак, Можно ли получить последний aux_id с помощью order_by? Как? ...

...