1

こんにちは私はdjangoとpythonを初めて使用します。Userdjangoモデルを拡張してモデルにメソッドを追加したいので、このメソッドをビューから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)

そして、ビューで、私はこのようにsthをしました:

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つ指定)

エラーの詳細を確認しました。「request」変数が含まれていますが、、、およびの3つの変数を渡すacc_typeだけfb_idですfb_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 に答える