В чем разница между 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
связан с вашей реализацией пользовательской модели.