В чем разница между get_user_model() и импортом модели CustomUser напрямую?

Это мой views.py в API сервере под управлением Django REST framework.

from rest_framework import generics

from users.models import CustomUser
from .serializers import CustomUserSerializer


class APIView(generics.ListAPIView):
    queryset = CustomUser.objects.all()
    serializer_class = CustomUserSerializer
<

Итак, правильный views.py должен выглядеть следующим образом;

from rest_framework import generics

from django.contrib.auth import get_user_model
from .serializers import CustomUserSerializer


class APIView(generics.ListAPIView):
    queryset = get_user_model().objects.all()
    serializer_class = CustomUserSerializer

Я протестировал и оба кода работают так, как я хотел. В чем разница между этими двумя кодами? Действительно ли get_user_model() лучше?

Я использую django v4, python 3.9, django rest framework.

Для вашего проекта? Никакой разницы.

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

Согласно источнику get_user_model, не очень много.

Идея get_user_model состоит в том, чтобы отделить аутентификацию от реальной модели. Цель приложений django - быть независимыми частями. Используя get_user_model, вы гарантируете, что имеющийся у вас объект User содержит все поля абстрактного пользователя. Затем вы можете использовать приложение в других проектах, не заботясь о реализации реальной модели пользователя.

В примере, который вы нам показали, использование get_user_model не добавляет развязки, поскольку CustomUserSerializer связан с вашей реализацией пользовательской модели.

Вернуться на верх