2017-06-18 19 views
2

私はまだ初心者ですので、どんな助けでも喜んで感謝します。 Djangoを実行する1.10Django:外国のフィールドを照会できません

特定のマネージャに割り当てられたすべてのプロファイルを取得しようとしていますが、クエリセットが常に空になります。

Model.py

BLOCKQUOTE

class Profile(models.Model): 
    user = models.OneToOneField(User, on_delete=models.CASCADE) 
    first_name = models.CharField(max_length=30, blank=False) 
    last_name = models.CharField(max_length=30, blank=False) 
    email = models.EmailField(blank=True, help_text='Optional',) 
    receive_email_notifications = models.BooleanField(default=False) 
    manager = models.ForeignKey(User, unique=False, blank=True, related_name='+', null=True) 

    def get_full_name(self): 
     """ 
     Returns the first_name plus the last_name, with a space in between. 
     """ 
     full_name = '%s %s' % (self.first_name, self.last_name) 
     return full_name.strip() 


    def publish(self): 
     return self.save 

    def __str__(self): 
     return str(self.user) 

View.py

BLOCKQUOTE

def instrument_list(request): 
    # pulls all instruments from instrument model 
    instruments = Instrument.objects.all().order_by('instrument_name') 
    test = Profile.objects.filter(manager='jenn') 
    print(test) 

    # pulls all checklists from checklist model 
    checklists = Checklist.objects.all().order_by('created_date') 
    # takes instruments, pushes them to template with variable 'instruments' 
    return render(request, 'blog/instrument_list.html', {'instruments': instruments, 'checklists': checklists}) 
私も(非外部キー属性を持つ)単一のプロファイルエントリをフィルタリングし、管理者がデータベースに保存され、出力はこの

BLOCKQUOTE

<User: jenn> 
のように見えた方法を印刷しようとした

私はその出力をフィルタリングしようとすると、

はしかし、たとえ、私のクエリセットが出てくる空

BLOCKQUOTE

test = Profile.objects.filter(manager='<User: jenn>') 

は、私はデータベースを照合することができます何かに私のフィルタパラメータを調整する必要があると思うが、私はそのフォーマットが何であるかわかりません。私はドキュメントを調べてみたが、探しているものが見つからなかった。

答えて

2

しかし、これは単なるモデルインスタンスの文字列表現です。実際のインスタンスが必要です。もちろん

jenn = User.objects.get(username="Jenn") 
test = Profile.objects.filter(manager=jenn) 

、すでにインスタンスとしてjennを持っていたら、代わりにFKの逆アクセサ使用することができますする:

test = jenn.profile_set.all() 

そして、あなたはJENNを持っていない、とあなたはドンが」をtはそれを必要とする、あなたは1つのクエリで全体のことを行うことができます。

test = Profile.objects.filter(manager__username="Jenn") 
+0

をありがとう!私は今私のミスを完全に見ています。文字フィールドの入力に文字列表現を使用することに慣れてきました。 これが私の問題を解決しました –

0
私はまた、非外部キーattributを持つ単一のプロファイルエントリを(フィルタリング試した

e)マネージャがデータベースにどのように保存され、出力が次のように表示されるかを印刷します。

これは、マネージャがデータベースに保存する方法ではなく、インスタンスユーザーの「可読」表現です。

あなたが管理者でフィルタしたい場合には、そのようなこと行うことができます。

test = Profile.objects.filter(manager__pk= primary_key_of_manager) 

または

temp_manager = User.objects.get(...) 
test = Profile.objects.filter(manager=temp_manager) 
関連する問題