Как получить значение родителя из ForeignKey (в django -REST)? - PullRequest
1 голос
/ 11 апреля 2020

У меня есть класс модели Banks и класс модели Branches, как показано ниже:

class Banks(models.Model):
    name = models.CharField(max_length=49, blank=True, null=True)
    id = models.BigIntegerField(primary_key=True)

    class Meta:
        managed = False
        db_table = 'banks'


class Branches(models.Model):
    ifsc = models.CharField(primary_key=True, max_length=11)
    bank = models.ForeignKey(Banks, models.DO_NOTHING, blank=True, null=True)
    branch = models.CharField(max_length=74, blank=True, null=True)
    address = models.CharField(max_length=195, blank=True, null=True)
    city = models.CharField(max_length=50, blank=True, null=True)
    district = models.CharField(max_length=50, blank=True, null=True)
    state = models.CharField(max_length=26, blank=True, null=True)

Мой запрос выглядит следующим образом:

branch = Branches.objects.get(ifsc=IFSC) # where IFSC is passed in URL

Мои сериализаторы выглядят так:

class BranchSerializer(serializers.ModelSerializer):

    class Meta:

        model = Branches
        fields = '__all__'

class BankSerializer(serializers.ModelSerializer):

    class Meta:

        model = Banks
        fields = '__all__'

Когда я запускаю упомянутый запрос, я получаю следующий вывод: (пример)

{
    "ifsc": "UTIB0000007",
    "branch": "NEW DELHI",
    "address": "STATESMAN HOUSE,  148, BARAKHAMBA ROAD",
    "city": "DELHI",
    "district": "NEW DELHI",
    "state": "DELHI",
    "bank": 13
}

Здесь 13 (в этом примере) - ForeignKey, но я хочу значение этого банка (т.е. родительский) ) вместо ключа.

Желаемый результат должен выглядеть следующим образом:

{
    "ifsc": "UTIB0000007",
    "branch": "NEW DELHI",
    "address": "STATESMAN HOUSE,  148, BARAKHAMBA ROAD",
    "city": "DELHI",
    "district": "NEW DELHI",
    "state": "DELHI",
    "bank": "BANK NAME"
}

Пожалуйста, помогите мне с этим, я новичок в django -REST и подробное объяснение будет высоко ценится .

1 Ответ

0 голосов
/ 11 апреля 2020

Вам необходимо добавить поле в сериализатор

class BranchSerializer(serializers.ModelSerializer):
    bank = serializers.CharField(source='bank.name')

    class Meta:

        model = Branches
        fields = '__all__'

Вывод:

{
    "ifsc": "UTIB0000007",
    "branch": "NEW DELHI",
    "address": "STATESMAN HOUSE,  148, BARAKHAMBA ROAD",
    "city": "DELHI",
    "district": "NEW DELHI",
    "state": "DELHI",
    "bank": "BANK NAME"
}
...