嗨,我是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))
编辑: 添加@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_type
,fb_id
和fb_token
。
有什么想法吗?
答案 0 :(得分:0)
尝试
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()
答案 1 :(得分:0)
看看这里: https://docs.djangoproject.com/en/dev/topics/auth/default/#creating-users
只需查看文档,您就可以找到很多答案。