Django(DRF) Нулевое поле в адресе клиента

Я пытаюсь сохранить данные клиента. ниже представлен models.py:

class Address(models.Model):
    street_address_line_1 = models.CharField(max_length=50)
    street_address_line_2 = models.CharField(max_length=50)
    city = models.CharField(max_length=50)
    state = models.CharField(max_length=50)
    zip = models.IntegerField()   
    country = models.CharField(max_length=50)   



class Client(models.Model):
    primary_contact_first_name = models.CharField(max_length=50)
    primary_contact_last_name = models.CharField(max_length=50)
    primary_contact_email = models.CharField(max_length=50, unique=True)
    primary_contact_phone_number = models.CharField(max_length=50, unique=True)
    primary_contact_phone_type = models.CharField(max_length=50)
    secondary_contact_first_name = models.CharField(max_length=50)
    secondary_contact_last_name = models.CharField(max_length=50)
    secondary_contact_email = models.CharField(max_length=50, unique=True)
    secondary_contact_phone_number = models.CharField(max_length=50, unique=True)
    secondary_contact_phone_type = models.CharField(max_length=50)
    client_address = models.ForeignKey(Address,related_name="client_address",on_delete=models.CASCADE, null=True, blank=False)
    
   
    def __str__(self):
        return self.primary_contact_email

и views.py:

@api_view(["POST"])
def createClientView(request):
    if request.method == "POST":
        serializer = ClientSerializer(data=request.data, many=False)
        if serializer.is_valid():
            serializer.save()
            return Response(status=status.HTTP_200_OK)
        error = Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
        return error

и serializers.py:

class AddressSerializer(serializers.ModelSerializer):
    class Meta:
        model = Address
        fields = [
            "street_address_line_1",
            "street_address_line_2",
            "city",
            "state",
            "zip",
            "country",
        ]


class ClientSerializer(serializers.ModelSerializer):
    address = AddressSerializer(source="addresss",read_only=True)

    class Meta:
        model = Client
        fields = [
            "primary_contact_first_name",
            "primary_contact_last_name",
            "primary_contact_email",
            "primary_contact_phone_number",
            "primary_contact_phone_type",
            "secondary_contact_first_name",
            "secondary_contact_last_name",
            "secondary_contact_email",
            "secondary_contact_phone_number",
            "secondary_contact_phone_type",
            "address",
        ]

пример данных для размещения:

{
    "primary_contact_first_name": "iliyas",
    "primary_contact_last_name": "shaik",
    "primary_contact_email": "a@a.com",
    "primary_contact_phone_number": "9185213654",
    "primary_contact_phone_type": "HOme",
    "secondary_contact_first_name": "meraa",
    "secondary_contact_last_name": "shaik",
    "secondary_contact_email": "z@z.com",
    "secondary_contact_phone_number": "8963251470",
    "secondary_contact_phone_type": "Mobile",
    "address": {
        "street_address_line_1": "NTR NAGAR",
        "street_address_line_2": "CHOWRASTA",
        "city": "KURNOOL",
        "state": "ANDHRA",
        "zip": 51896352,
        "country": "INDIA"
    }
}

enter image description here

client_address_id is null when post request data is serialized and clientaddress_id is foriegn key that should be id of row present in address model table but here no data is being saved, the address model table is empty.How could I do this?

Вам необходимо переопределить create метод ClientSerializer

class ClientSerializer(serializers.ModelSerializer):
    address = AddressSerializer(source="addresss")

    class Meta:
        model = Client
        fields = [
            "primary_contact_first_name",
            "primary_contact_last_name",
            "primary_contact_email",
            "primary_contact_phone_number",
            "primary_contact_phone_type",
            "secondary_contact_first_name",
            "secondary_contact_last_name",
            "secondary_contact_email",
            "secondary_contact_phone_number",
            "secondary_contact_phone_type",
            "address",
        ]

    def create(self, validated_data):
        address_data = validated_data['address']
        # Create address instance
        address = Address.objects.create(...)

        # Create client instance
        client = Client.objects.create(...)

        return client
Вернуться на верх