Django: Каков наилучший способ импортировать моего пользовательского пользователя в views.py? - PullRequest
0 голосов
/ 24 апреля 2020

На самом деле я создал своего собственного пользовательского пользователя (MyUser) в models.py

from django.db import models
from django.contrib.auth.models import AbstractUser

class MyUser(AbstractUser):
    country=models.CharField(max_length=20)

settings.py

AUTH_USER_MODEL = 'new_user.MyUser'

Я создал простой функция в views.py для создания новых пользователей.

from django.shortcuts import render,redirect
from django.http import HttpResponse
from django.contrib.auth import get_user_model
from django.conf import settings

def save_account(request):
    MyUser=get_user_model()
    if request.method == "POST":
        name=request.POST.get("name")
        email=request.POST.get("email")
        password1=request.POST.get("password1")
        password2=request.POST.get("confirm-password")
        country=request.POST.get("country")
        new_user=MyUser.objects.create_user(username=name,email=email,password=password1,country=country)
        new_user.save()
        return redirect('/')
    else:
        return HttpResponse("404 Not Found")

1. Здесь я использую функцию get_user_model () для получения моего текущего пользовательского пользователя.

2. У меня есть второй вариант, чтобы получить моего пользовательского пользователя, просто импортировав модель MyUser из models.py, а затем использовать ее.

from .models import MyUser

3. У меня есть третий вариант получить пользовательского пользователя, просто импортировав AUTH_USER_MODEL непосредственно из settings.py и использовать его следующим образом.

from django.conf import settings
MyUser=settings.AUTH_USER_MODEL

, но третий вариант возвращает строку вместо возврата моего пользовательского пользователя .но почему?

Я просто хочу знать, какой вариант лучше всего импортировать в user-user в views.py и почему?

1 Ответ

2 голосов
/ 24 апреля 2020

Ваши первые два варианта в порядке. Использование get_user_model упрощает повторное использование приложения без изменения импорта. Однако многие Django проекты не предназначены для повторного использования, и в этом случае явный импорт проясняет, откуда импортируется пользовательская модель.

settings.AUTH_USER_MODEL означает строку. Вы устанавливаете его в строку, когда вы вводите AUTH_USER_MODEL = 'new_user.MyUser', а Django не автоматически изменяет его на экземпляр модели при доступе к нему. Это полезно для внешних ключей, потому что это означает, что вам не нужно импортировать модель. Например:

class MyModel(models.Model):
    author = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        on_delete=models.CASCADE,
    )
...