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"
}
}
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