2017-11-06 3 views
-1

次のprint(owner)は、私のモデルに含まれるものとは異なる値を返すのはなぜですか?下に定義されている書式設定されたユーザー名を取得することは可能ですか?私は私のdefプロファイル(要求)を簡略化し、私はformattedusernameを取得するための解決策を見つけることができるまで私の他の議論を取り出しました。私のモデルで不要な値を返すrequest.user.attribute

def profile(request): 
    owner = User.objects.get (formattedusername=request.user.formattedusername) 
    args = {'user':request.user.formattedusername} 
    print (owner) 
    return render(request, 'accounts/profile.html', args) 

Starting development server at http://127.0.0.1:8000/ 
Quit the server with CTRL-BREAK. 
@3-alphas4numeric 
[06/Nov/2017 16:18:11] "GET /account/profile/ HTTP/1.1" 200 1416 

formattedusernameがHCA \ 3-alphas4numericとしてデータベースに格納され、それはまた、以下で定義されています、それはまた、すべての私の他のモデルでキーフィールドだと使用を回避する方法はありません

class User(AbstractBaseUser, PermissionsMixin): 



    email = models.EmailField(unique=True) 
    username = models.CharField(max_length=7, unique=True) 
    formattedusername = models.CharField(max_length=11, unique=True, primary_key = True) 
    first_name = models.CharField(max_length=40) 
    last_name = models.CharField(max_length=140) 
    date_joined = models.DateTimeField(default=timezone.now) 
    is_active = models.BooleanField(default=True) 
    is_staff = models.BooleanField(default=False) 
    facility = models.CharField(max_length=140) 
    jobdescription = models.CharField(max_length=140) 
    positiondescription = models.CharField(max_length=140) 
    coid = models.CharField(max_length=5) 
    streetaddress = models.CharField(max_length=140) 



    USERNAME_FIELD = 'username' 

    class Meta: 
     app_label = 'accounts' 
     db_table = "user" 

    def save(self, *args, **kwargs): 
     self.formattedusername = '{domain}\{username}'.format(
      domain='HCA', username=self.username) 
     super(User, self).save(*args, **kwargs); 
+0

「max_length」よりも長いので、有効なユーザー名にすることはできません。 –

+0

フォーマットされたユーザー名は11文字です。私は、ユーザー名ではなく、私のビューにフォーマットされたユーザー名をプルしようとしています。 – student101

+0

'HCA \ 3-alphas4numeric'は20文字です。 –

答えて

1

あなたがprint(owner)を行うと、あなたはUSERNAME_FIELDの値を出力します:それは、既存のデータベースですので、キーの整数。それがAbstractBaseUser.__str__の実装方法です。

def get_username(self): 
    "Return the identifying username for this User" 
    return getattr(self, self.USERNAME_FIELD) 

def __str__(self): 
    return self.get_username() 
+0

このHAKKUNをありがとう、私は過去数日間このことを理解しようとしてきましたが、他の誰も私がどのように質問したかに基づいてそれを得るようには見えませんでした。 – student101

+0

USERNAME_FIELDを変更せずに、ビューに書式設定されたユーザー名を印刷する方法はありますか? – student101

+1

'print(owner.formattedusername)'または '__str__'を上書きします –

関連する問題