Django模型中的创建用户方法

1 投票
2 回答
3049 浏览
提问于 2025-04-17 14:35

你好,我刚开始学习django和python。我想扩展django的User模型,并在模型中添加一个create_user的方法,然后我在视图中调用这个create_user方法。但是,我遇到了一个错误信息。

我的模型是:

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

class Basic(models.Model):
    user = models.OneToOneField(User)
    gender = models.CharField(max_length = 10)

    def create_ck_user(acc_type, fb_id,fb_token):
        # "Create a user and insert into auth_user table"
        user = User.objects.create_user(acc_type,fb_id,fb_token)
        user.save()

class External(models.Model):
    user = models.OneToOneField(Basic)
    external_id = models.IntegerField()
    locale = models.CharField(max_length = 40)
    token = models.CharField(max_length = 250)

在视图中,我做了类似这样的事情:

Basic.create_ck_user('acc_type' = 'fb', 'fb_id' = fb_id, 'fb_token' = fb_token)

错误信息显示:

keyword can't be an expression (views.py, Basic.objects.create_ck_user('acc_type' = 'fb', 'fb_id' = fb_id, 'fb_token' = fb_token))

编辑:
在添加了@classmethod之后,我把view.py改成了:

...    
if (request.method == 'POST'):
            acc_type = request.POST.get('acc_type')
            fb_id = request.POST.get('fb_id')
            fb_token = request.POST.get('fb_token')

            Basic.create_ck_user(acc_type,fb_id,fb_token)
...

然后出现了一个错误信息:

create_ck_user()需要3个参数(给了4个)

我检查了错误的详细信息,发现里面有一个"request"变量,尽管我只传了3个变量:acc_typefb_idfb_token

有什么想法吗?

2 个回答

0

你可以看看这里:

https://docs.djangoproject.com/en/dev/topics/auth/default/#creating-users

在文档里,你能找到很多答案。

1

试试这个

Basic.create_ck_user('fb', fb_id, fb_token)

当你调用一个函数或方法时,你并不是在给字符串赋值,而是在给变量赋值。不过,因为你在函数定义中使用了位置参数,所以其实你根本不需要字符串。

而且,给字符串赋值是没用的……因为字符串是不可变的对象。

另外,你希望这个方法是一个类方法。否则,你在调用它之前需要先创建一个User的实例。

# inside class definition  
    @classmethod
    def create_ck_user(cls, acc_type, fb_id,fb_token):
        # "Create a user and insert into auth_user table"
        user = cls.objects.create_user(acc_type,fb_id,fb_token)
        user.save()

撰写回答