Я не знаю, как создать метод для удаления ребер в django rest framework, используя orientdb OGM.
Я использую pyorient == 1.5.5 и версию OrientDB 3.0.18.
У меня есть два класса вершин: ousers, ocompany.Также у меня есть два отношения (ребра) Классы: ofriends, oworksat.Так, например:
Чтобы установить отношения друзей, мне нужны два клиента.И для того, чтобы завязать отношения, мне нужен один пользователь и одна компания.Каждое отношение имеет свой собственный идентификатор кластера.
Я знаю, что могу получить доступ к следующим функциям:
(Pdb) dir(graph)
['PROPERTY_TYPES', '_GROOVY_GET_DB', '_GROOVY_NULL_LISTENER', '_GROOVY_TRY',' класс ', ' delattr ', ' dict ', ' dir ', ' doc ',' eq ', ' format ', ' ge ', ' getattribute ', ' gt ',' hash ', ' init ', ' le ', ' lt ', ' module ',' ne ', ' new ', ' уменьшите ', ' redu_ex ', ' repr ',' setattr ', ' sizeof ', ' str ', ' subclasshook ', ' weakref ',«_last_cred», «_last_db», «_last_user», «пакет», «оба», «обаE», «build_mapping», «clear_registry», «клиент», «coerce_class_names», «coerce_class_names_to_quoted», «compute_all_properties», configute',' create_all ',' create_class ',' create_edge ',' create_edge_command ',' create_function ',' create_props_mapping ',' create_vertex ',' create_vertex_command ', ' delete_vertex ', ' delete_vertex_command ',' drop ',' drop_all ',' drop_class ',' edge_from_record ','dge_from_records ',' element_from_link ',' element_from_record ',' elements_from_links ',' elements_from_records ',' export ',' get_edge ',' get_element ',' get_vertex ',' gremlin ',' guard_reserved_words ',' inE ',in_ ',' include ',' init_broker_for_class ',' list_superclasses ', ' ocompany ', ' ofriends ',' open ', ' ousers ','out ',' outE ', ' oworksat ',' populate ',' property_from_schema ',' props_from_db ',' props_to_db ',' query ',' registry ',' save_element ',' scripts ','server_version ',' strict ',' toposort_classes ',' valid_element_base ',' vertex_from_record ',' vertexes_from_records ']
Если я сделаю:
graph.delete_vertex("#21:0")
Это хорошо работает и удаляет # 21:0 строка вершины пользователя, которая является частью отношений ofriends и oworskat, а также эта команда удаляет отношениябедро, где эта вершина включена.Очевидно, я не хочу удалять всю вершину, только конкретное ребро (не класс, а только строку отношения).
Мне было интересно, существует ли какая-нибудь команда, например delete_edge (),но dir (график) не говорит мне ничего связанного.
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')
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://'+ORIENTDB['HOST']+':'+str(ORIENTDB['PORT'])+'/'+ORIENTDB['NAME']+'',''+ORIENTDB['USER']+'', ''+ORIENTDB['PASSWORD']+'',initial_drop=False,serialization_type=OrientSerialization.Binary)
graph = Graph(Config.from_url(''+ORIENTDB['HOST']+'/'+ORIENTDB['NAME']+'',''+ORIENTDB['USER']+'', ''+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 OUsers(Node):
element_plural = 'ousers'
postgresql_id=Integer(nullable=False,unique=True)
class OCompany(Node):
element_plural = 'ocompany'
postgresql_id=Integer(nullable=False,unique=True)
class OFriends(Relationship):
label = 'ofriends'
from_postgresql_ouser_id=Integer(nullable=False,unique=True)
to_postgresql_ouser_id=Integer(nullable=False,unique=True)
class OWorksAt(Relationship):
label = 'oworksat'
from_postgresql_ouser_id=Integer(nullable=False,unique=True)
to_postgresql_ocompany_id=Integer(nullable=False,unique=True)
graph.create_all(Node.registry)
graph.create_all(Relationship.registry)
serializers.py
from .models import (OUsers,OCompany,OFriends,OWorksAt)
from rest_framework import serializers
from django.contrib.auth import get_user_model
User = get_user_model()
class OFriendsSerializer(serializers.Serializer):
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.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
class OFriendsSerializer(serializers.Serializer):
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.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 destroy(self, request, *args, **kwargs):
queryset = graph.ofriends.query()
import pdb;pdb.set_trace()
# HERE should be the command