我一直在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)
我认为这是错误的解决方法,但是我不确定为什么,有人可以让我知道为什么上述不是最佳做法吗?注意:虽然确实可以完成工作。
谢谢!
答案 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
。您需要绝对确定提供的默认值已经存在,并且永远不会从数据库中消失。