Membaca Dokumentasi Django:
get_user_model ()
Daripada merujuk ke Pengguna secara langsung, Anda harus mereferensikan model pengguna menggunakan django.contrib.auth.get_user_model (). Metode ini akan mengembalikan model Pengguna yang saat ini aktif - model Pengguna kustom jika ditentukan, atau Pengguna sebaliknya.
Saat Anda menentukan kunci asing atau relasi banyak-ke-banyak ke model Pengguna, Anda harus menentukan model kustom menggunakan pengaturan AUTH_USER_MODEL.
Saya bingung dengan teks di atas. Haruskah saya melakukan ini:
author = models.ForeignKey(settings.AUTH_USER_MODEL)
atau ini...
author = models.ForeignKey(get_user_model())
Keduanya tampaknya berhasil.
AUTH_USER_MODEL
pengaturan dalam kode yang dijalankan pada waktu impor.get_user_model()
Hanya bekerja setelah Django mengimpor semua model."get_user_model()
, untuk atribut kelas gunakanAUTH_USER_MODEL
?Baru sejak Django 1.11.
Sejak Django 1.11 anda dapat menggunakan
get_user_model()
dalam kedua kasus! Jadi kalau tidak mau repot lagi, bawa saja."dalam kedua kasus" berarti: jika Anda memerlukan model pengguna untuk mengakses atributnya, serta jika Anda ingin mendefinisikan relasi ForeignKey / ManyToMany.
Dari changelog :
jadi ... apakah masih ada alasan untuk menggunakan
settings.AUTH_USER_MODEL
? Nah, dokumen masih merekomendasikansettings.AUTH_USER_MODEL
(yang merupakan string) untuk mendefinisikan relasi, tetapi tanpa memberikan alasan eksplisit. Mungkin bermanfaat untuk kinerja, tetapi tampaknya tidak terlalu menjadi masalah.Contoh kode:
from django.db import models from django.contrib.auth import get_user_model ... ... user = models.ForeignKey( get_user_model(), null=True, # explicitly set null, since it's required in django 2.x. - otherwise migrations will be incompatible later! ... )
sumber
get_user_model()
dapat dipanggil pada waktu impor; bagaimanapun, Django tetap menyarankan bahwa pengguna mendefinisikan hubungan kunci asing dan banyak ke banyak menggunakan AUTH_USER_MODELget_user_model
, terutama bagi pembaca yang bingung tentang perbedaannya)Sejak Django 1.11,
get_user_model()
sebenarnya menggunakansettings.AUTH_USER_MODEL
:def get_user_model(): """ Return the User model that is active in this project. """ try: return django_apps.get_model(settings.AUTH_USER_MODEL, require_ready=False) except ValueError: raise ImproperlyConfigured("AUTH_USER_MODEL must be of the form 'app_label.model_name'") except LookupError: raise ImproperlyConfigured( "AUTH_USER_MODEL refers to model '%s' that has not been installed" % settings.AUTH_USER_MODEL )
sumber
settings.AUTH_USER_MODEL mengembalikan string (lokasi model Pengguna) misalnya 'user_accounts.User'
get_user_model () mengembalikan kelas model ACTUAL, bukan string.
Jadi dalam kasus di mana Anda membutuhkan model User, gunakan get_user_model (). Jika Anda membutuhkan lokasinya (module.model sebagai string), gunakan pengaturan.AUTH_USER_MODEL.
sumber
Cara untuk kembali ke model pengguna default jika AUTH_USER_MODEL tidak disetel:
from django.conf import settings from django.contrib.auth.models import User USER_MODEL = getattr(settings, 'AUTH_USER_MODEL', User)
sumber
AUTH_USER_MODEL
sudah memiliki default, jadi akan selalu disetel.User
adalah model