0
votes

This is the currently layout of the files that I'm using for my django project and database.

Models.py:

from django.db import models
import json

# Create your models here.
class Data(models.Model):
    node_id = models.ForeignKey("Node", on_delete=models.CASCADE)
    timestamp = models.DateTimeField()
    vibration = models.IntegerField()
    moisture = models.IntegerField()
    gps_latitude = models.CharField(max_length=250)
    gps_longitude = models.CharField(max_length=250)
    gyro_x = models.FloatField()
    gyro_y = models.FloatField()
    gyro_z = models.FloatField()
    accelero_x = models.FloatField()
    accelero_y = models.FloatField()
    accelero_z = models.FloatField()
    displacement = models.IntegerField()


class Node(models.Model):
    node_id = models.IntegerField(primary_key=True)

serializers.py:

from .models import Data,Node
from rest_framework import serializers


class DataSerializer(serializers.ModelSerializer):
class Meta:
    model = Data
    fields = '__all__'


class NodeSerializer(serializers.ModelSerializer):
class Meta :
    model = Node
    fields = '__all__'

class AcceleroXSerializer(serializers.ModelSerializer):
class Meta:
    model = Data
    fields = ['timestamp', 'accelero_x']

views.py:

class DataViewSet(viewsets.ModelViewSet):
    queryset = Data.objects.all()
    serializer_class = DataSerializer
    filter_backends = [DjangoFilterBackend]
    filterset_fields = ['node_id']


class MapView(viewsets.ModelViewSet):
    queryset = Data.objects.filter(node_id=1).order_by('-id')[:1]
    serializer_class = DataSerializer


class NodeViewSet(viewsets.ModelViewSet):
    queryset = Node.objects.all()
    serializer_class = NodeSerializer


class AcceleroXViewSet(viewsets.ModelViewSet):
queryset = Data.objects.all()
serializer_class = AcceleroXSerializer

urls.py:

router = routers.DefaultRouter()
router.register(r'data', DataViewSet, 'data')
router.register(r'node', NodeViewSet, 'node')
router.register(r'map', MapView, 'map')
router.register(r'accelerox', AcceleroXViewSet, 'accelerox')


urlpatterns = [
path('admin/', admin.site.urls),
path(r'api/', include(router.urls)),
path(r'', include('rest_framework.urls', namespace='rest_framework')),
path('charts/', Charts.as_view(), name='charts'),
path('charts2/', ChartsDua.as_view(), name='charts2'),
path('chartnode/', ChartNode.as_view(), name='chartnode'),
path('map/', Map.as_view(), name='map'),
path('addnode/', views.add_node, name='add-node'),
path('node/', TambahNode.as_view(), name='tambahnode'),

]

When I do make migrations, it runs just fine. But when I do migrate it gets the following errorm which I don't know how to resolve:

File "E:\api\env\lib\site-packages\django\db\models\fields__init__.py", line 1821, in get_prep_value return int(value) ValueError: invalid literal for int() with base 10: ''

1
Delete or replace previously inserted float values in integer field in database - Hisham___Pak
share your last two migration file. - Md. Tanvir Raihan

1 Answers

0
votes

I solve it. But it kinda in a bad way to solve this, because my Django still under development and the data in the database are all dummy data :

  1. Delete the migrations file on all app
  2. DROP database
  3. Create a new database (same as before)
  4. Renew your models.py and save it
  5. run command :

    manage.py makemigrations manage.py makemigrations yourappname manage.py migrate yourappname manage.py migrate

  6. create new superuser (if you need)