Django 如何使用DRf中的嵌套序列化程序和视图集同时更新和创建?
我的模型:Django 如何使用DRf中的嵌套序列化程序和视图集同时更新和创建?,django,django-models,django-rest-framework,django-views,django-serializer,Django,Django Models,Django Rest Framework,Django Views,Django Serializer,我的模型: class User(AbstractUser): password = models.CharField(max_length=128, blank=True, null=True) email = models.EmailField(max_length=254, unique=True) dial_code_id = models.CharField(max_length=100) mobile_number = models.CharField
class User(AbstractUser):
password = models.CharField(max_length=128, blank=True, null=True)
email = models.EmailField(max_length=254, unique=True)
dial_code_id = models.CharField(max_length=100)
mobile_number = models.CharField(max_length=100, unique=True)
username = models.CharField(max_length=150, unique=True, blank=True, null=True)
is_active = models.BooleanField(default=True)
class Meta:
db_table = "my_user"
class UserLocation(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='location')
latitude = models.DecimalField(max_digits=8, decimal_places=3)
longitude = models.DecimalField(max_digits=8, decimal_places=3)
address = models.TextField()
class Meta:
db_table = "user_location"
我必须更新“first_name”、“last_name”,同时必须在“UserLocation”表中为同一用户创建一个对象。
为此,我创建了一个视图集
class BasicInformationViewSet(viewsets.ModelViewSet):
queryset = User.objects.all()
serializer_class = BasicInformationSerializer
def list(self, request, *args, **kwargs):
custom_data = {
"status": False,
"message": 'Method Not Allowed',
}
return Response(custom_data, status=status.HTTP_200_OK)
def create(self, request, *args, **kwargs):
custom_data = {
"status": False,
"message": 'Method Not Allowed',
}
return Response(custom_data, status=status.HTTP_200_OK)
def update(self, request, *args, **kwargs):
instance = self.get_object()
serializer = self.get_serializer(instance, data=request.data)
if serializer.is_valid():
serializer.save()
custom_data = {
"status": True,
"message": 'Successfully added your basic information',
}
return Response(custom_data, status=status.HTTP_200_OK)
else:
custom_data = {
"status": False,
"message": serializer.errors,
}
return Response(custom_data, status=status.HTTP_200_OK)
上述视图的序列化程序:
class UserLocationSerializer(serializers.ModelSerializer):
latitude = serializers.DecimalField(max_digits=8, decimal_places=3, required=True)
longitude = serializers.DecimalField(max_digits=8, decimal_places=3, required=True)
address = serializers.CharField(required=True)
class Meta:
model = UserLocation
fields = "__all__"
class BasicInformationSerializer(serializers.ModelSerializer):
first_name = serializers.CharField(required=True)
last_name = serializers.CharField(required=True)
location = UserLocationSerializer()
class Meta:
model = User
fields = ['first_name', 'last_name', 'location']
def update(self, instance, validated_data):
instance.first_name = validated_data.get('first_name', instance.first_name)
instance.last_name = validated_data.get('last_name', instance.last_name)
instance.save()
return instance
“first_name”和“last_name”正在更新,但“UserLocation”模型中的字段未更新/创建
多谢各位