Skip to content

Commit

Permalink
type removal migration and filters for relations
Browse files Browse the repository at this point in the history
  • Loading branch information
unknowncoder05 committed Aug 7, 2022
1 parent ca93db5 commit 672d923
Show file tree
Hide file tree
Showing 4 changed files with 60 additions and 21 deletions.
28 changes: 28 additions & 0 deletions api/nodes/migrations/0004_remove_node_type_and_more.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# Generated by Django 4.0.4 on 2022-08-07 02:52

from django.db import migrations, models
import django.db.models.deletion


class Migration(migrations.Migration):

dependencies = [
('nodes', '0003_remove_node_parents'),
]

operations = [
migrations.RemoveField(
model_name='node',
name='type',
),
migrations.AlterField(
model_name='proposedrelationship',
name='from_node',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='to_nodes', to='nodes.node'),
),
migrations.AlterField(
model_name='proposedrelationship',
name='to_node',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='from_nodes', to='nodes.node'),
),
]
4 changes: 1 addition & 3 deletions api/nodes/models/node.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,14 +45,12 @@ class Meta:
created_by = models.ForeignKey(User, related_name='proposed_relationships', on_delete=models.CASCADE)

def __str__(self):
return f'{self.from_node} {self.type} {self.to_node}'
return f'{self.from_node} {self.to_node}'

def save(self, *args, **kwargs):
if self.from_node == self.to_node:
raise ValueError('Cannot create relationship between a node and itself')
if self.from_node.from_nodes.filter(to_node=self.to_node).exists():
raise ValueError('Relationship already exists')
if self.from_node.type == self.to_node.type:
raise ValueError('Cannot create relationship between same type nodes')
super().save(*args, **kwargs)

32 changes: 18 additions & 14 deletions api/nodes/serializers/node.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,20 +32,6 @@ class Meta:
fields = ('id', 'from_node', 'to_node', 'created_by')


class ReadProposedFromRelationshipSerializer(serializers.ModelSerializer):

class Meta:
model = ProposedRelationship
fields = ('id', 'from_node', 'created_by')


class ReadProposedToRelationshipSerializer(serializers.ModelSerializer):

class Meta:
model = ProposedRelationship
fields = ('id', 'to_node', 'created_by')


class DescribeNodeSerializer(serializers.ModelSerializer):

created_by = UserSerializer(read_only=True)
Expand All @@ -62,6 +48,24 @@ class Meta:
fields = ('id', 'created_by', 'content', 'private', 'feed', 'parents_count', 'children_count')


class ReadProposedFromRelationshipSerializer(serializers.ModelSerializer):

from_node = ListNodeSerializer()

class Meta:
model = ProposedRelationship
fields = ('id', 'from_node', 'created_by')


class ReadProposedToRelationshipSerializer(serializers.ModelSerializer):

to_node = ListNodeSerializer()

class Meta:
model = ProposedRelationship
fields = ('id', 'to_node', 'created_by')


class DescribeProposedRelationshipSerializer(serializers.ModelSerializer):

from_node = ListNodeSerializer()
Expand Down
17 changes: 13 additions & 4 deletions api/nodes/views/node.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@

from api.nodes.models import Node, ProposedRelationship
from api.nodes.serializers import (
ListNodeSerializer, DescribeProposedRelationshipSerializer, WriteProposedRelationshipSerializer, DescribeNodeSerializer, WriteNodeSerializer
ListNodeSerializer, ReadProposedFromRelationshipSerializer,
ReadProposedToRelationshipSerializer, DescribeProposedRelationshipSerializer,
WriteProposedRelationshipSerializer, DescribeNodeSerializer, WriteNodeSerializer,
)


Expand All @@ -33,11 +35,18 @@ def get_serializer_class(self):
return WriteProposedRelationshipSerializer
if self.action == 'retrieve':
return DescribeProposedRelationshipSerializer
if self.action in ['list']:
if self.request.query_params.get('from_node'):
return ReadProposedFromRelationshipSerializer
if self.request.query_params.get('to_node'):
return ReadProposedToRelationshipSerializer
return super().get_serializer_class()

def get_queryset(self, **kwargs):
print("kwargs", kwargs)
if 'node' in kwargs:
if 'from_node' in kwargs:
self.node = get_object_or_404(Node, id=kwargs['node'])
return ProposedRelationship.objects.filter(Q(from_node=self.node) | Q(to_node=self.node))
return ProposedRelationship.objects.filter(from_node=self.node)
if 'to_node' in kwargs:
self.node = get_object_or_404(Node, id=kwargs['node'])
return ProposedRelationship.objects.filter(to_node=self.node)
return ProposedRelationship.objects.all()

0 comments on commit 672d923

Please sign in to comment.