Ich baue eine django Rest API zum Speichern/Verwalten von Kundendaten für mein Projekt. Ich habe zwei Modelle. Kunde zum Speichern grundlegender Kundendaten und Kundendetails zum Speichern einer Reihe von Kundendetails. Ich möchte eine einzelne API schreiben, um Daten für beide Modelle zu erstellen/zu aktualisieren.django rest framework: Objekt vom Typ 'NoneType' hat kein len() beim Aufruf get Methode der zugehörigen Tabelle
Jetzt speichert mein Code die Benutzerdaten. Aber jetzt kann ich die Kundendaten nicht bekommen. Wenn ich die Methode get aufrufen, tritt der folgende Fehler auf.
TypeError at /api/v1/customer
object of type 'NoneType' has no len()
Request Method: GET
Request URL: http://127.0.0.1:8000/api/v1/customer
Auch Muss ich nichts extra tun, um diesen Code für updation zu verwenden (PUT)
urls.py
router.register(r'customer', views.CustomerViewSet, 'customers')
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):
customer = models.OneToOneField(Customer, on_delete=models.CASCADE, primary_key=True,)
spouse_name = models.CharField(max_length=256)
interests = models.CharField(max_length=256)
"""many more fields to go"""
Serializer .py
class CustomerDetailsSerializer(serializers.ModelSerializer):
class Meta:
model = CustomerDetails
fields = ('spouse_name',)
class CustomerSerializer(serializers.ModelSerializer):
customer_details = CustomerDetailsSerializer(required=True)
class Meta:
model = Customer
fields = ('name', 'city', 'customer_details',)
def create(self, validated_data):
request = self.context.get('request')
user = request.user
# create user
customer = Customer.objects.create(
user = user,
name = validated_data['name'],
city = validated_data['city'],
# etc ...
)
print(json.dumps(validated_data, indent=4))
customer_details_data = validated_data.pop('customer_details')
# create profile
customer_details = CustomerDetails.objects.create(
customer = customer,
spouse_name = customer_details_data['spouse_name'],
)
customer.customer_details = customer_details_data;
return customer
class CustomerListSerializer(serializers.ModelSerializer):
model = Customer
customer_details = CustomerDetailsSerializer()
class Meta:
model = Customer
fields = '__all__'
views.py
class CustomerViewSet(viewsets.ModelViewSet):
customer_photo_thumb = Customer.get_thumbnail_url
customer_details = ''
permission_classes = [permissions.IsAuthenticated, TokenHasReadWriteScope]
queryset = Customer.objects.all()
serializer_class = CustomerSerializer
def get_queryset(self):
queryset = Customer.objects.all()
def get_serializer_class(self):
if self.action == 'list' or self.action == 'retrieve':
return CustomerListSerializer
return CustomerListSerializer
Bitte fügen Sie die vollständige Stack-Trace –
komplette Stacktrace: http://pastebin.com/K17QmM91 –