1

嗨,我是 django 和 python 的新手。我想扩展 djangoUser模型并在模型中添加一个方法,然后我从视图中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))

编辑:添加@classmehtod 后,将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 个)

检查错误详细信息,它包括“请求”变量,尽管我只传递了 3 个变量acc_typefb_idfb_token.

有任何想法吗?

4

2 回答 2

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()
于 2013-02-03T08:43:04.033 回答
0

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

只需查看文档,您就可以找到很多答案。

于 2013-02-03T09:23:42.080 回答