Ich baue eine django rest api zum speichern/verwalten von kundendaten für mein projekt. Ich habe zwei Modelle. Kunde für die Speicherung der Grunddaten Details und Kundendetails für die Speicherung einer Reihe von Kundendetails. Ich möchte eine einzelne API schreiben, um Daten für beide Modelle zu erstellen/zu aktualisieren.django rest api spare zwei django models gleichzeitig durch einen einzigen rest api call
Wie kann ich das tun?
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))
]
Haben Sie versucht (APIView) von (generics.CreateAPIView) – Cadmus
Warum haben Sie nicht die gleiche ID (des Kundenmodells) als Fremdschlüssel im Kundendetailmodell verwendet, so dass es effizient ist, die Details des Kunden zu verweisen und umgekehrt. –
@ PiyushS.Wanare, Du meinst so? 'Code Klasse Kundendetails (models.Model): Kunde = models.ForeignKey (Kunde, primary_key = True, db_index = True, on_delete = models.CASCADE, related_name = 'Kunden_Details', default = 0) spouse_name = models.CharField (max_length = 256) Interessen = models.CharField (max_length = 256) "" "viele weitere Felder zu gehen" "" ' –