我不知道如何使用 orientdb OGM 在 django rest 框架中创建删除边的方法。
我正在使用pyorient==1.5.5
和OrientDB 3.0.18
版本。
我有两个顶点类:ousers
, ocompany
. 我也有两个关系(边缘)类:ofriends
, oworksat
. 例如:
要建立ofriends
关系,我需要两个ousers
. 为了建立oworksat
关系,我需要一个ouser
和一个ocompany
。每个关系都有自己的集群 ID。
我知道我可以访问这些功能:
(Pdb) dir(graph)
['PROPERTY_TYPES'、'_GROOVY_GET_DB'、'_GROOVY_NULL_LISTENER'、'_GROOVY_TRY'、' class '、' delattr '、' dict '、' dir '、' doc '、' eq '、' format '、' ge '、' getattribute ',' gt ',' hash ',' init ',' le ',' lt ',' module ',' ne ',' new ',' reduce ','reduce_ex ',' repr ',' setattr ',' sizeof ','str ',' subclasshook ',' weakref ','_last_cred','_last_db','_last_user','batch','both','bothE','build_mapping','clear_registry','client','coerce_class_names' ,'coerce_class_names_to_quoted','compute_all_properties','config','create_all','create_class','create_edge','create_edge_command','create_function','create_props_mapping','create_vertex','create_vertex_command','delete_vertex','删除顶点命令','drop','drop_all','drop_class','edge_from_record','edges_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”,“填充”,“property_from_schema”,“props_from_db”,“props_to_db”,“查询”,“注册表”,“save_element','scripts','server_version','strict','toposort_classes','valid_element_base','vertex_from_record','vertexes_from_records']
如果我做:
graph.delete_vertex("#21:0")
它工作得很好并删除了 #21:0ouser
顶点行,它是ofriends
和oworskat
关系的一部分,因此,该命令也删除了包含该顶点的关系。显然,我不想删除整个顶点,只删除特定的边(不是类,只是关系行)。
我想知道是否存在像 delete_edge() 这样的命令,但是 dir(graph) 并没有告诉我任何相关的信息。
设置.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()
模型.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)
序列化程序.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