Django Rest Framework: Как заполнить поле ForiegnKey связанным именем? - PullRequest
0 голосов
/ 09 октября 2019

У меня есть две модели: одна BookModel и другая AuthorModel. Я в основном хочу создать поле внешнего ключа для BookModel для ссылки на AuthorModel. И я смог установить это успешно.

Но когда я получаю объект / запись из BookModel, я получаю идентификатор автора вместо всего объекта автора. Как мне это сделать?

Вот что у меня в коде. В models.py:

class AuthorModel(models.Model):
     id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
     name = models.CharField('Name', max_length=255)
     pen_name = models.CharField('Pen Name', max_length=255)

class BookModel(models.Model):
     id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
     name = models.CharField('Book Name', max_length=255)
     author = models.ForeignKey(Author, on_delete=models.CASCADE, blank=True, default='', related_name='book_authorid')

В serializers.py:

class AuthorSerializer(serializers.ModelSerializer):
   class Meta:   
        model = Author
        fields = ('id', 'name', 'pen_name')


class BookSerializer(serializers.ModelSerializer):
   author = AuthorSerializer() 
   class Meta:
        model = Book
        fields = ('id', 'name', 'author')

Вид:

class BookViewSet(mixins.RetrieveModelMixin,
                       mixins.UpdateModelMixin,
                       mixins.DestroyModelMixin,
                       viewsets.GenericViewSet):
queryset = BookModel.objects.all()
serializer_class = BookSerializer
permission_classes = (AllowAny,)

1 Ответ

0 голосов
/ 10 октября 2019

Аргумент глубина должен дать вам весь объект автора.

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

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

class BookSerializer(serializers.ModelSerializer):
   author = AuthorSerializer() 
   class Meta:
        model = Book
        depth = 1
        fields = ('id', 'name', 'author')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...