Django在不重新输入的情况下将对象信息获取到方法

Django在不重新输入的情况下将对象信息获取到方法,django,python-3.x,Django,Python 3.x,我不知道该怎么解释。我正在尝试使用“自定义保存方法”之类的方法。无论如何,希望我的代码有意义 我目前正在测试一款CustomUser型号。如果没有给出用户名,我想生成用户名。我还使用了full_clean方法,以避免保存为空的实例。以下是我所拥有的: 试验 模型方法: def full_clean_save(self): # How do I get my 'username' reckognized here if it isn't ''? # This always is =

我不知道该怎么解释。我正在尝试使用“自定义保存方法”之类的方法。无论如何,希望我的代码有意义

我目前正在测试一款
CustomUser
型号
。如果没有给出用户名,我想生成用户名。我还使用了
full_clean
方法,以避免保存为空的实例。以下是我所拥有的:

试验

模型方法:

def full_clean_save(self):
    # How do I get my 'username' reckognized here if it isn't ''?
    # This always is == ''
    if self.username == '':
        # Makes a random username from BaseUserManager
        self.username = CustomUser.objects.make_random_password()

    self.full_clean()
    self.save()
第二次编辑: 发现这个测试打破了我的其他测试。这确实有效。出于安全原因,我还被告知使用
create\u user

编辑: 但问题是,每次运行此方法时,它都会生成一个用户名,即使给定了用户名:

测试:

if
语句不是问题所在,因为这会给出相同的结果:

def full_clean_save(self):
    if self.username == '':
        self.username = CustomUser.objects.make_random_password()
        self.full_clean()
        self.save()
    else:
        self.full_clean()
        self.save()

嗯,对不起,我要用别的东西。确切的问题是什么?你有错误吗?什么不起作用?我更新了我的问题@VaibhavVishalI更新了我的问题@dirkgroten你不应该以这种方式创建用户,因为你现在的方法是,你在数据库中保存纯文本原始密码。改为使用
create\u user
方法,该方法将散列密码并将其正确保存到数据库中。
user = {
    'username': 'Test_User',
    'password': 'testpassword',
    'first_name': 'Testy',
    'middle_name': 'Tester',
    'last_name': 'Testman',
    'email': 'testman@test.com',
}

def test_CustomUser_will_save_user(self):
    c = CustomUser(**user).full_clean_save()

    self.assertTrue(CU.objects.filter(**user).exists())

# asserts False because c.username == 'FFQ4CUK8GWnf' instead of Test_User
def full_clean_save(self):
    if self.username == '':
        self.username = CustomUser.objects.make_random_password()
        self.full_clean()
        self.save()
    else:
        self.full_clean()
        self.save()