Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ################### my_server/r_server/serializer.py
- from rest_framework import serializers
- from .models import *
- class NetAdapterSerializer(serializers.ModelSerializer):
- class Meta:
- model = NetAdapter
- exclude = ['client']
- class DisksSerializer(serializers.ModelSerializer):
- class Meta:
- model = Disks
- exclude = ['client']
- class ClientSerializer(serializers.ModelSerializer):
- disk = DisksSerializer(many=True)
- adapter = NetAdapterSerializer(many=True)
- def create(self, validated_data):
- disks_data = validated_data.pop('disk')
- net_adapter_data = validated_data.pop('adapter')
- client = Client.objects.create(**validated_data)
- for disk_data in disks_data:
- Disks.objects.create(client=client, **disk_data)
- for adapter_data in net_adapter_data:
- NetAdapter.objects.create(client=client, **adapter_data)
- return client
- def update(self, instance, validated_data): # <---- It's my problem... :(
- disks_data = validated_data.pop('disk')
- net_adapter_data = validated_data.pop('adapter')
- client = Client.objects.update(**validated_data)
- for disk_data in disks_data:
- Disks.objects.update(client=instance, **disk_data)
- for adapter_data in net_adapter_data:
- NetAdapter.objects.update(client=instance, **adapter_data)
- return client
- class Meta:
- model = Client
- fields = '__all__'
- ################### my_server/r_server/urls.py
- from django.urls import path
- from .views import ClientDetailView, ClientViewSet, ClientAddView
- urlpatterns = [
- path('clients/', ClientViewSet.as_view()),
- path('clients/<int:pk>', ClientDetailView.as_view()),
- path('clients/add', ClientAddView.as_view()),
- ]
- ################### rebrian_server/r_server/views.py
- from rest_framework import generics
- from .serializer import ClientSerializer
- from .models import Client
- class ClientViewSet(generics.ListAPIView):
- queryset = Client.objects.all()
- serializer_class = ClientSerializer
- class ClientAddView(generics.CreateAPIView):
- queryset = Client.objects.all()
- serializer_class = ClientSerializer
- class ClientDetailView(generics.RetrieveUpdateDestroyAPIView):
- queryset = Client.objects.all()
- serializer_class = ClientSerializer
- ################################## my_server/r_server/models.py
- from django.db import models
- class Client(models.Model):
- name = models.CharField('name', max_length=255)
- description = models.TextField('Description', max_length=255, default='no_description')
- memory_total = models.CharField('Memory total', max_length=20)
- cpu_cores = models.IntegerField()
- cpu_physical_cores = models.IntegerField()
- cpu_frequency_current = models.IntegerField()
- cpu_frequency_max = models.IntegerField()
- date_add = models.DateTimeField(auto_now_add=True)
- date_update = models.DateTimeField(auto_now=True)
- client_is_active = models.BooleanField(default=True, verbose_name='Active')
- class Meta:
- managed = True
- verbose_name = 'Client'
- def __str__(self):
- return '%s: %s' % (self.name, self.description)
- class Disks(models.Model):
- client = models.ForeignKey('Client', related_name='disk', verbose_name='Disk', on_delete=models.CASCADE)
- device = models.CharField('Device', max_length=10)
- total = models.IntegerField('Total volume')
- used = models.IntegerField('Used space')
- free = models.IntegerField('Free space')
- fstype = models.CharField('FS type', max_length=15)
- mountpoint = models.CharField('Mount point', max_length=5)
- class Meta:
- managed = True
- verbose_name = 'Disk'
- def __str__(self):
- return '%s: %s' % (self.device, self.total)
- class NetAdapter(models.Model):
- client = models.ForeignKey('Client', related_name='adapter', verbose_name='NetAdapter',
- on_delete=models.CASCADE)
- net_adapter_device = models.CharField('NetAdapter Name', max_length=200)
- net_adapter_status = models.BooleanField(default=False)
- net_adapter_mtu = models.IntegerField()
- net_adapter_speed = models.IntegerField()
- net_adapter_duplex = models.CharField(default='Unknown', max_length=200)
- IPv4 = models.GenericIPAddressField('IPv4', protocol='IPv4', default='0.0.0.0')
- MAC = models.CharField(default='00-00-00-00-00-00', max_length=17)
- class Meta:
- managed = True
- verbose_name = 'NetAdapter'
- def __str__(self):
- return '%s: %s' % (self.net_adapter_device, self.IPv4)
Advertisement
RAW Paste Data
Copied
Advertisement