Я пытаюсь, чтобы у клиента была связь 1: 1 со многими адресами электронной почты и телефонами.
class Client(models.Model):
class Email(models.Model):
client = models.ForeignKey(Client, on_delete=models.CASCADE, related_name='emails')
email = models.CharField(null=True, blank=True, max_length=50)
class Phone(models.Model):
client = models.ForeignKey(Client, on_delete=models.CASCADE, related_name='phones')
phone = models.CharField(null=True, blank=True, max_length=50)
И это мой сериализатор
class ClientSerializer(serializers.ModelSerializer):
emails = EmailSerializer(required=False, allow_null=True, many=True)
phones = PhoneSerializer(required=False, allow_null=True, many=True)
Я не могу точно определить, почему сообщениене будет продолжаться, потому что он продолжает говорить, что клиент требуется.
Хотя я заставил его работать, добавив read_only = True, даже если я определю def create (self, validated_data) в ClientSerializer, я не могу заполучитьмассив адресов электронной почты и телефонов в данных json.
Так я назвал сериализатор в views.py
serializer = ClientSerializer(data=request.data)
Так выглядят данные json
{ "ID": 0, "электронная почта": [{ "ID": 0, "EmailType": "Главная", "электронная почта": "test@gmail.com"}], "телефоны": [], "название":" me "}
Так что моя цель - если в массиве emails есть свойство email, вставьте его, иначе проигнорируйте. так же, как телефоны.
Так я и назвал сериализатор в views.py
@api_view('POST'])
def client(request):
serializer = ClientSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_200_OK)
Так что внутри ClientSerializer я создаю объект клиента через Client.objects.create (validated_data);
Затем извлек массив писем из validated_data и сделал цикл for. for (ed в emailData):
Created an email = Email() object then
email.email = emailData.get('email')
email.client = client
Но это дает мне ошибку "нулевое значение в столбце" client_id "нарушает ненулевое ограничение". Когда я делаю печать (электронная почта), объект client из email.client имеет значение null, что странно, учитывая, что print (client) имеет идентификатор.
Мысли?