создать несколько связанных объектов с Django REST Framework - PullRequest
0 голосов
/ 16 мая 2018

Я использую Djago 2.0 и Django REST Framework

У меня есть следующие классы моделей для contacts / models.py

class Contact(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    first_name = models.CharField(max_length=100)
    last_name = models.CharField(max_length=100, blank=True, null=True)
    date_of_birth = models.DateField(blank=True, null=True)

class ContactPhoneNumber(models.Model):
    contact = models.ForeignKey(Contact, on_delete=models.CASCADE)
    phone = models.CharField(max_length=100)
    primary = models.BooleanField(default=False)

контакты / views.py

class ContactViewSet(viewsets.ModelViewSet):
    serializer_class = ContactSerializer
    permission_classes = (IsAuthenticated, AdminAuthenticationPermission,)

    def get_queryset(self):
        return Contact.objects.filter(user=self.request.user)

    def perform_create(self, serializer):
        serializer.save(user_id=self.request.user)

и contacts / serializers.py определяется как

class ContactPhoneNumberSerializer(serializers.ModelSerializer):
    class Meta:
        model = ContactPhoneNumber
        fields = ('id', 'phone', 'primary', 'created', 'modified')


class ContactSerializer(serializers.HyperlinkedModelSerializer):
    phone_numbers = ContactPhoneNumberSerializer(source='contactphonenumber_set', many=True)

    user = serializers.CurrentUserDefault()

    class Meta:
        model = Contact
        fields = ('url', 'id', 'first_name', 'last_name', 'date_of_birth', 'phone_numbers')

    def create(self, validated_data):
        phone_numbers = validated_data.pop('contactphonenumber_set')
        user = validated_data.pop('user_id')
        instance = Contact.objects.create(
            user=user,
            **validated_data
        )
        for phone_data in phone_numbers:
            ContactPhoneNumber.objects.create(contact=instance, **phone_data)
        return instance

Я хочу иметь возможность создавать несколько экземпляров phone_number с новым контактным объектом.

Как я могу передать несколько телефонных номеров с полями phone, primary вместе с контактными данными?

1 Ответ

0 голосов
/ 16 мая 2018

Ваше тело JSON Post должно выглядеть так:

{
    "user": 1,
    "first_name": "Anuj",
    "last_name": "TBE",
    "date_of_birth": "1990-01-01",
    "contactphonenumber_set": [
        {
            "phone": "+91999999999",
            "primary": false
        },
        {
            "phone": "+91999999993",
            "primary": true
        }
    ]
}

Подумайте, как вы хотите иметь дело с дубликатами в этом контексте.

...