Django REST Framework - передать связанное поле в данных POST

Я использую 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

приложение / 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"
    }
]

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

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

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

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

включите pk для состояния в свой пост

Jason 20.05.2018 15:28
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
160
1

Ответы 1

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

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

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)

Я хочу иметь возможность передавать contact_pk в запросе по имени state. Итак, я хочу читать только дополнительные данные, которые я передаю в данных POST. Почему не отображаются данные state или любые поля, которых нет в fields?

Anuj TBE 20.05.2018 19:27

Другие вопросы по теме