Django, DRF (& React) Внешний ключ, как отобразить значение имени вместо идентификатора внешнего ключа - PullRequest
0 голосов
/ 02 февраля 2019

Существует две модели Django - ClientCompany & Proposal, и внешний ключ ClientCompany находится в модели Proposal.В предложении как отобразить имя ClientCompany вместо идентификатора внешнего ключа?

models.py:

class ClientCompany(models.Model):
    name = models.CharField("Client Name", max_length=255)
    abn_acn = models.BigIntegerField("ABN / ACN")

    def __str__(self):
        return self.name

class Proposal(models.Model):
    proj_name = models.CharField("Project Name", max_length=255)
    loc_state = models.CharField(
        max_length=3,
    )
    proj_type = models.CharField(
        max_length=30,
    )
    prop_status = models.CharField(
        max_length=20,
    )
    client = models.ForeignKey(ClientCompany, on_delete=models.CASCADE)
    oneic = models.ForeignKey(
        User, on_delete=models.CASCADE, related_name='main_engineer')
    twoic = models.ForeignKey(
        User, on_delete=models.CASCADE, related_name='second_engineer')
    created_at = models.DateTimeField(default=datetime.now)

    def __str__(self):
        return self.proj_name

serializers.py:

class ClientSerializer(serializers.ModelSerializer):
    class Meta:
        model = ClientCompany
        fields = ('id', 'name', 'abn_acn')


class ProposalSerializer(serializers.ModelSerializer):

    class Meta:
        model = Proposal
        fields = ('id', 'proj_name', 'loc_state', 'proj_type', 'prop_status', 'client', 'oneic', 'twoic',)

queryset api.py:

class ProposalViewSet(viewsets.ModelViewSet):
    permission_classes = [permissions.IsAuthenticated, ]
    queryset = Proposal.objects.all()
    serializer_class = ProposalSerializer

в настоящее время показывает идентификатор внешнего ключа клиента

Я застрял на этом, пытался применить существующие решения, рекомендованные дляпохожие проблемы, но не повезло ... если кто-то может сказать мне, что я скучаю - спасибо

Ответы [ 2 ]

0 голосов
/ 02 февраля 2019

Я обнаружил, что это сработало, добавив строку serializers.SlugRelatedField в serializers.py:

class ProposalSerializer(serializers.ModelSerializer):

    client = serializers.SlugRelatedField(slug_field="name", read_only=True)

    class Meta:
        model = Proposal
        fields = ('id', 'proj_name', 'loc_state', 'proj_type', 'prop_status',
                  'client', 'oneic', 'twoic',)
0 голосов
/ 02 февраля 2019

Обновите ваш сериализатор следующим образом:

class ProposalSerializer(serializers.ModelSerializer):
    client = ClientSerializer()
    class Meta:
        model = Proposal
        fields = ('id', 'proj_name', 'loc_state', 'proj_type', 'prop_status', 'client', 'oneic', 'twoic',)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...