导入自定义用户模型的Django 2.1模型

时间:2018-11-17 23:19:14

标签: django django-models django-admin

我一直在Django 2.1项目中开发扩展的用户模型。我很好奇我将CustomUser模型导入另一个模型(用作ForeinKey)的方式是否正确。

我过去遇到过混乱,这表明从admin应用简单导入User模型,而是从django.conf导入是不正确的。

从基本用户模型导入的示例:

from django.conf import settings

User = settings.AUTH_USER_MODEL
...
class <ModelName>(models.mode):
    user = ForeignKey(User, on_delete=models.CASCADE, default=1)

现在我正在使用CustomUser模型(扩展AbstractUser),

users / models.py:

class CustomUser(AbstractUser):

    objects = CustomUserManager()

    def __str__(self):
        return self.username

通过设置(如上所示)导入此模型是更好的做法,还是在下面(在我的Post应用程序中)以正确的方式进行操作:

posts / models.py:

from users.models import CustomUser

class Post(models.Model):
    user = models.ForeignKey(CustomUser, on_delete=models.CASCADE, default=1)

我认为这是错误的解决方法,但是我不确定为什么,有人可以让我知道为什么上述不是最佳做法吗?注意:虽然确实可以完成工作。

谢谢!

1 个答案:

答案 0 :(得分:1)

导入方式没有任何问题。导入的“设置”方式仅仅是通向底层模型的一种way回方式,因为Django允许您使用自定义模型进行用户身份验证处理。

但是,更好的方法是使用“惰性”加载方法,该方法根本不需要任何导入语句:

import sys
from PyQt5 import QtWidgets
from PyQt5.QtCore import Qt

class MainFrame(QtWidgets.QWidget):

    def __init__(self, parent=None):
        super(MainFrame, self).__init__(parent)

        self.setWindowFlags(Qt.FramelessWindowHint)
        self.setFixedSize(860, 560)

        layout = QtWidgets.QHBoxLayout(self)
        self.btn = QtWidgets.QPushButton("TEST")
        layout.addWidget(self.btn)

        self.btn.clicked.connect(self.Btn_clicked)

    def Btn_clicked(self) :
        self.setAttribute(Qt.WA_TranslucentBackground)
        print("clicked")

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    Frame = MainFrame(None)
    Frame.show()
    app.exec_()

顺便说一下,请小心在user = models.ForeignKey('CustomUser', on_delete=models.CASCADE, default=1) 上使用default。您需要绝对确定提供的默认值已经存在,并且永远不会从数据库中消失。