diff --git a/client/admin.py b/client/admin.py index ca0dcf1..3097065 100644 --- a/client/admin.py +++ b/client/admin.py @@ -1,4 +1,4 @@ from django.contrib import admin -from .models import TaxType, Country, State, City, Client +from .models import TaxType, Country, State, City, Address, Client -admin.site.register([TaxType, Country, State, City, Client]) +admin.site.register([TaxType, Country, State, City, Address, Client]) diff --git a/client/models.py b/client/models.py index 4069e54..b0be80f 100644 --- a/client/models.py +++ b/client/models.py @@ -32,9 +32,7 @@ class City(models.Model): return self.name -class Client(models.Model): - name = models.CharField(max_length=30) - profile_picture = models.ImageField(upload_to='client_images', null=True, blank=True) +class Address(models.Model): city = models.ForeignKey(City, on_delete=models.CASCADE) address_line1 = models.CharField(max_length=50) address_line2 = models.CharField(max_length=50) @@ -42,5 +40,14 @@ class Client(models.Model): tax_type = models.ForeignKey(TaxType, on_delete=models.CASCADE) tax_id = models.CharField(max_length=30) + def __str__(self): + return self.address_line1 + + +class Client(models.Model): + name = models.CharField(max_length=30) + profile_picture = models.ImageField(upload_to='client_images', null=True, blank=True) + address = models.ForeignKey(Address, on_delete=models.CASCADE) + def __str__(self): return self.name diff --git a/client/serializers.py b/client/serializers.py index f3ce347..afa4665 100644 --- a/client/serializers.py +++ b/client/serializers.py @@ -1,5 +1,5 @@ from rest_framework import serializers -from .models import TaxType, Country, State, City, Client +from .models import TaxType, Country, State, City, Address, Client class TaxTypeSerializer(serializers.ModelSerializer): @@ -29,5 +29,10 @@ class CitySerializer(serializers.ModelSerializer): class ClientSerializer(serializers.ModelSerializer): class Meta: model = Client - fields = ['id', 'name', 'profile_picture', 'city', 'address_line1', 'address_line2', - 'postal_code', 'tax_type', 'tax_id'] + fields = ['id', 'name', 'address'] + + +class AddressSerializer(serializers.ModelSerializer): + class Meta: + model = Address + fields = ['id', 'city', 'address_line1', 'address_line2', 'postal_code', 'tax_type', 'tax_id'] diff --git a/client/urls.py b/client/urls.py index 61e17d0..43489f7 100644 --- a/client/urls.py +++ b/client/urls.py @@ -1,10 +1,16 @@ -from django.urls import path +from django.urls import path, include from . import views +from rest_framework import routers + + +router = routers.DefaultRouter() +router.register(r'tax-types', views.TaxTypeViewSet) +router.register(r'clients', views.ClientViewSet) +router.register(r'address', views.AddressViewSet) +router.register(r'cities', views.CityViewSet) +router.register(r'states', views.StateViewSet) +router.register(r'countries', views.CountryViewSet) urlpatterns = [ - path('tax-types/', views.TaxTypeList.as_view()), - path('countries/', views.CountryList.as_view()), - path('states/', views.StateList.as_view()), - path('cities/', views.CityList.as_view()), - path('clients/', views.ClientList.as_view()) + path('', include(router.urls)), ] diff --git a/client/views.py b/client/views.py index ceb3e9b..346f8e1 100644 --- a/client/views.py +++ b/client/views.py @@ -1,56 +1,47 @@ -from rest_framework.response import Response -from rest_framework.views import APIView -from rest_framework.authentication import TokenAuthentication, SessionAuthentication +from .models import TaxType, Country, State, City, Client, Address +from .serializers import TaxTypeSerializer, CountrySerializer, StateSerializer, CitySerializer, ClientSerializer, AddressSerializer +from rest_framework import viewsets from rest_framework.permissions import IsAuthenticated -from .models import TaxType, Country, State, City, Client -from .serializers import TaxTypeSerializer, CountrySerializer, StateSerializer, CitySerializer, ClientSerializer +from rest_framework.authentication import TokenAuthentication, SessionAuthentication -class TaxTypeList(APIView): +class TaxTypeViewSet(viewsets.ReadOnlyModelViewSet): + queryset = TaxType.objects.all() + serializer_class = TaxTypeSerializer authentication_classes = [TokenAuthentication, SessionAuthentication] permission_classes = [IsAuthenticated] - def get(self, request): - tax_types = TaxType.objects.all() - serializer = TaxTypeSerializer(tax_types, many=True) - return Response(serializer.data) - -class CountryList(APIView): +class CountryViewSet(viewsets.ReadOnlyModelViewSet): + queryset = Country.objects.all() + serializer_class = CountrySerializer authentication_classes = [TokenAuthentication, SessionAuthentication] permission_classes = [IsAuthenticated] - def get(self, request): - countries = Country.objects.all() - serializer = CountrySerializer(countries, many=True) - return Response(serializer.data) - -class StateList(APIView): +class StateViewSet(viewsets.ReadOnlyModelViewSet): + queryset = State.objects.all() + serializer_class = StateSerializer authentication_classes = [TokenAuthentication, SessionAuthentication] permission_classes = [IsAuthenticated] - def get(self, request): - states = State.objects.all() - serializer = StateSerializer(states, many=True) - return Response(serializer.data) - -class CityList(APIView): +class CityViewSet(viewsets.ReadOnlyModelViewSet): + queryset = City.objects.all() + serializer_class = CitySerializer authentication_classes = [TokenAuthentication, SessionAuthentication] permission_classes = [IsAuthenticated] - def get(self, request): - cities = City.objects.all() - serializer = CitySerializer(cities, many=True) - return Response(serializer.data) - -class ClientList(APIView): +class ClientViewSet(viewsets.ReadOnlyModelViewSet): + queryset = Client.objects.all() + serializer_class = ClientSerializer authentication_classes = [TokenAuthentication, SessionAuthentication] permission_classes = [IsAuthenticated] - def get(self, request): - clients = Client.objects.all() - serializer = ClientSerializer(clients, many=True) - return Response(serializer.data) + +class AddressViewSet(viewsets.ReadOnlyModelViewSet): + queryset = Address.objects.all() + serializer_class = AddressSerializer + authentication_classes = [TokenAuthentication, SessionAuthentication] + permission_classes = [IsAuthenticated] \ No newline at end of file