Я создаю django rest api для сохранения/управления данными клиента для моего проекта. У меня две модели. Клиент для хранения основного клиента и CustomerDetails для хранения информации о клиенте. Я хочу написать один api для создания/обновления данных для обеих моделей.django rest api сохранить две модели django за один раз за один вызов вызова api
Как это сделать?
models.py
class Customer(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
name = models.CharField(max_length=20)
address = models.CharField(max_length=50)
city = models.CharField(max_length=256)
"""some more fields to go"""
# Create your models here.
class CustomerDetails(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
customer = models.ForeignKey(Customer, db_index=True, on_delete=models.CASCADE,
related_name='customer_details',
default=0)
spouse_name = models.CharField(max_length=256)
interests = models.CharField(max_length=256)
"""many more fields to go"""
views.py
import pprint
from .models import Customer, CustomerDetails
from oauth2_provider.ext.rest_framework import TokenHasReadWriteScope, TokenHasScope
from rest_framework import permissions, viewsets
from .serializers import CustomerSerializer, CustomerDetailsSerializer
from django.contrib import admin
from rest_framework import generics
admin.autodiscover()
# Create your views here.
# ViewSets define the view behavior.
class CustomerViewSet(viewsets.ModelViewSet):
permission_classes = [permissions.IsAuthenticated, TokenHasReadWriteScope]
queryset = Customer.objects.all()
serializer_class = CustomerSerializer
def perform_create(self, serializer):
serializer.save(user=self.request.user)
class CustomerCreateAPIView(generics.CreateAPIView):
model = Customer
serializer_class = CustomerSerializer
serializers.py
from rest_framework import serializers
from models import Customer, CustomerDetails
class CustomerDetailsSerializer(serializers.ModelSerializer):
class Meta:
model = CustomerDetails
fields = ('spouse_name',)
class CustomerSerializer(serializers.ModelSerializer):
customer_details = CustomerDetailsSerializer()
class Meta:
model = Customer
fields = ('name', 'city', 'customer_details')
urls.py
router = routers.SimpleRouter(trailing_slash=False)
router.register(r'customer', views.CustomerViewSet, 'customers')
urlpatterns = [
url(r'^', include(router.urls))
]
Вы пытались (APIView) insted of (generics.CreateAPIView) – Cadmus
Почему у вас не используется тот же идентификатор (модели клиента), что и внешний ключ в модели данных клиента, поэтому будет эффективно ссылаться на детали клиента и наоборот. –
@ PiyushS.Wanare, Вы имеете в виду вот так? 'код класса CustomerDetails (models.Model): клиент = models.ForeignKey (Заказчик, primary_key = True, db_index = True, on_delete = models.CASCADE, related_name = 'customer_details', по умолчанию = 0) spouse_name = models.CharField (mAX_LENGTH = 256) интересы = models.CharField (max_length = 256) "" "много больше полей, чтобы идти" "" ' –