Django REST Framework - передать связанное поле в данные POST - PullRequest
0 голосов
/ 20 мая 2018

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

У меня есть модель для хранения адреса контакта, например

class ContactAddress(models.Model):
    contact = models.ForeignKey(Contact, on_delete=models.CASCADE)
    city = models.CharField(max_length=250)
    postal = models.CharField(max_length=6)
    state = models.ForeignKey(State, on_delete=models.PROTECT, blank=True)

У меня есть еще две модели для хранения state и country

class Country(models.Model):
    name = models.CharField(max_length=100, unique=True, verbose_name='Country Name')


class State(models.Model):
    country = models.ForeignKey(Country, on_delete=models.PROTECT)
    name = models.CharField(max_length=100, verbose_name='State Name')

Я хочу передать поле state с данными POST при создании новой записи address

app / serializers.py

class ContactAddressSerializer(serializers.ModelSerializer):
    class Meta:
        model = ContactAddress
        depth = 2
        fields = (
            'id', 'city', 'postal', 'state'
        )

    def create(self, validated_data):
        print(validated_data)

и мои POST данные

[
    {
        "city": "City Name",
        "postal": "110011",
        "state": "Bihar"
    }
]

Но в validated data нет данных state.Печать validate_data возврат

def create(self, validated_data):
    print(validated_data)

{'city': 'City Name', 'postal': '110011', 'contact': <Contact: contact_object>}

Как передать данные POST для соответствующего поля?

1 Ответ

0 голосов
/ 20 мая 2018
У государственной собственности

есть внешний ключ к другой модели.Если вы хотите использовать свойство состояния в классе сериализатора, оно не может вести себя как простое свойство

Сначала напишите сериализатор для модели состояния, затем используйте этот класс сериализатора в классе контактных адресов

class StateSerializer(serializers.ModelSerializer):
    class meta:
         Fields = ('name')

class ContactAddressSerializer(serializers.ModelSerializer):

state = StateSerializer()
class Meta:
    model = ContactAddress
    depth = 2
    fields = (
        'id', 'city', 'postal', 'state'
    )

def create(self, validated_data):
    print(validated_data)
...