trying "POST" ..
i don know  why SaveSerializer is no valid

view.py

@csrf_exempt
@api_view(['POST',])
def Save(request):
         serializer = SaveSerializer(data = request.data)
         data = {}
         data["status"] = "fail"
         serializer.is_valid()
         print(serializer.errors)
         if serializer.is_valid():
            serializer.save()
            data["status"] = "success"
            return Response(status=status.HTTP_200_OK)
         return Response(status=status.HTTP_404_NOT_FOUND)



model.py

from django.db import models
from colorful.fields import RGBColorField
from jsonfield import JSONField

# Create your models here.
class Work(models.Model):
    #work_id = models.AutoField(primary_key=True)
    work_date=models.DateField()
    work_name = models.CharField(max_length=128, default='', unique=True)
    #node_id = models.AutoField(primary_key=True)
    work_id = models.AutoField(primary_key=True)

class Label(models.Model):
   # label_id = models.AutoField(primary_key=True, null=False)
    label_title = models.CharField(max_length=128, default='')
    circle_size = models.DecimalField(decimal_places=0, max_digits=5)
    circle_color = RGBColorField()
    Label_work = models.ForeignKey(Work, on_delete=models.CASCADE, db_column = 
"Work.work_id")


class Node(models.Model):
    #node_id = models.AutoField(primary_key=True)
    node_title = models.CharField(max_length=128, default='')
    node_pointX = models.FloatField(null=False, default=100)
    node_pointY = models.FloatField(null=False, default=100)
    node_property = JSONField(default={})
    #node_property = JSONField(default={}, dump_kwargs={'ensure_ascii': False})
    node_label = models.ForeignKey(Label, on_delete=models.CASCADE, db_column = 
"Label.id"
                                   )
    node_work = models.ForeignKey(Work, on_delete=models.CASCADE, db_column = 
"Work.work_id"
                                  )

    def __str__(self):
        return self.node_title

class myRelation(models.Model):
   # relation_id = models.AutoField(primary_key=True)
    myfrom_node = models.ForeignKey(Node, related_name='from_n', 
on_delete=models.CASCADE
                                  )

    rel_type = models.CharField(max_length=128, default='')
    rel_property = JSONField(default={})

    rel_work = models.ForeignKey(Work, related_name="rpr", 
on_delete=models.CASCADE, db_column="Work.work_id")
    myto_node = models.ForeignKey(Node, related_name='to_n', 
on_delete=models.CASCADE
                                )



serializers.py

from rest_framework import serializers
from .models import Work, Label, Node, myRelation
import json, datetime


class WorkSerializer(serializers.ModelSerializer):
    class Meta:
        model = Work
        fields = ('work_date','work_name','work_id')

class LabelSerializer(serializers.ModelSerializer):
    Label_work = serializers.PrimaryKeyRelatedField()
    class Meta:
        model = Label
        fields = ('label_title','circle_size','circle_color','Label_work')

class NodeSerializer(serializers.ModelSerializer):
    node_label = serializers.PrimaryKeyRelatedField()
    node_work = serializers.PrimaryKeyRelatedField()
    class Meta:
        model = Node
        fields = 
('node_title','node_pointX','node_pointY','node_property','node_label')

class myRelationSerializer(serializers.ModelSerializer):
    myfrom_node = serializers.PrimaryKeyRelatedField()
    rel_work = serializers.PrimaryKeyRelatedField()
    myto_node = serializers.PrimaryKeyRelatedField()
    class Meta:
        model = myRelation
        fields = 
('myfrom_node','rel_type','rel_property','rel_work','myto_node')


class SaveSerializer(serializers.ModelSerializer):
    Node = NodeSerializer(many = True)
    Relation = myRelationSerializer(many = True)
    Label = LabelSerializer(many = True)

    class Meta:
        model = Node
        fields = ('Node','Relation','Label',)

    def create(self,validated_data):
        print("test2")
        nodes = validated_data.pop('node')
        relations = validated_data.pop('relation')
        labels = validated_data.pop('label')
        file_id = validated_data['file_id']
        work = Work.objects.filter(work_id = file_id)

        Node.objects.filter(node_work=file_id).delete()
        Label.objects.filter(Label_work=file_id).delete()
        myRelation.objects.filter(rel_work=file_id).delete()

        w = Work.objects.get(work_id=file_id)

        label_dictionary = dict()
        for _label in labels:
            #label_dictionary[_label["id"]] = _label.objects.create(Label_work 
= w, **_label)
            label_dictionary[_label["id"]] = 
_label.objects.create(label_title=_label["title"], 
circle_size=_label["circle_size"],
                                                                     
circle_color=_label["circle_color"], Label_work=w)

        dictionary = dict()
        for _node in nodes:
           # dictionary[_node["id"]] = _node.objects.create(node_label = 
label_dictionary[_node["label"]], Label_work = w, **_node)
            dictionary[_node["id"]] = 
_node.objects.create(node_title=_node["title"], node_pointX=_node["pointX"],
                                                          
node_pointY=_node["pointY"],node_property=_node["property"],
                                                          
node_label=label_dictionary[_node["label"]], node_work=w)

        for _relation in relations:
             From_node = dictionary[_relation["myfrom_node"]]
             To_node = dictionary[_relation["myto_node"]]
             _relation.objects.create(myfrom_node=From_node,  
rel_type=_relation["rel_type"],
                                      
rel_property=json.loads(_relation["rel_property"]),
                                      rel_work=w, myto_node=To_node)

        return work

class SaveAsSerializer(serializers.ModelSerializer):
        pass

-- 
You received this message because you are subscribed to the Google Groups 
"Django REST framework" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to