Подключение сериализаторов через вопрос не первичного ключа - PullRequest
0 голосов
/ 17 апреля 2019

У меня проблемы с созданием отношений между Project и Token, я хочу отобразить все токены для проекта в результате json проекта.PK проекта хранится в столбце проекта в Token.

models.py

class Project(models.Model):
    name = models.CharField(max_length=50)

class Token(models.Model):
    project = models.ForeignKey(Project,on_delete=models.CASCADE,blank=True)
    symbol = models.CharField(max_length=50)

serializers.py

class TokenSerializer(serializers.ModelSerializer):
    allow_null=True
    class Meta:
        model = Token
        fields = ('id','symbol')

class ProjectSerializer(serializers.ModelSerializer):

    development = DevelopmentSerializer()
    tokens = TokenSerializer()

    class Meta:
        model = Project
        fields = ('id','name','tokens')

Результат, который я хотел бы получить:

{
    "id": 1,
    "name": "Bitcoin",
    "tokens": [
        {
        "id": 1,
        "symbol": "BTC"
        }
    ]
}

В это время я получаюследующая ошибка:

Получена ошибка AttributeError при попытке получить значение для поля tokens на сериализаторе ProjectSerializer.Поле сериализатора может иметь неправильное имя и не соответствовать ни одному атрибуту или ключу в экземпляре Project.Исходный текст исключения был: объект «Проект» не имеет атрибута «токены».

1 Ответ

0 голосов
/ 17 апреля 2019

Вы должны добавить related_name к вашему проекту поле на модели Token , чтобы оно работало как обратный поиск:

class Token(models.Model):
    project = models.ForeignKey(Project,on_delete=models.CASCADE,blank=True, related_name='tokens')
    symbol = models.CharField(max_length=50)
...