私のプロジェクトの顧客データを保存/管理するためのdjango rest apiを構築しています。私は2つのモデルを持っています。基本的な顧客の詳細を保存するための顧客と、顧客の詳細を保存するためのCustomerDetails。私は両方のモデルのデータを作成/更新するための単一のAPIを書いています。django rest framework:関連テーブルのgetメソッドを呼び出すときに 'NoneType'型のオブジェクトにlen()がありません
私のコードは、ユーザーデータを保存しています。しかし、今私は顧客データを得ることができません。 getメソッドを呼び出すと、次のエラーが発生します。また
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
は、私がupdationため、このコード(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"""
シリアライザを使用して、余分な何かをする必要がありますか.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
完全なスタックトレースを含めてください –
完全なスタックトレース:http://pastebin.com/K17QmM91 –