2017-01-16 9 views
0

アイデアはかなりシンプルですが、私は自分のfuncで複数のモデルを照会する必要があります。私のテンプレートでそれをきれいに保つために、私は自分のデータを含む新しいモデルを抽象化することに決めました。私はラムダを介してモデルを作成しています。入れ子になったforeignKeyで照会する方法

ここにモデルです。ここで

class Contact(models.Model): 
    created_date = models.DateTimeField(auto_now_add=True) 
    updated_date = models.DateTimeField(auto_now=True) 
    lastname = models.CharField(max_length=50, null=True, blank=True) 
    firstname = models.CharField(max_length=50, null=True, blank=True) 
    email = models.EmailField(null=True, blank=True) 

class CRecord(models.Model): 
    created_date = models.DateTimeField(auto_now_add=True) 
    updated_date = models.DateTimeField(auto_now=True) 
    place = models.ForeignKey(Place, related_name="record") 
    contact = models.ForeignKey(Contact, blank=True, null=True, related_name="records") 

class Place(models.Model): 
    created_date = models.DateTimeField(auto_now_add=True) 
    updated_date = models.DateTimeField(auto_now=True) 
    deleted_date = models.DateTimeField(blank=True, null=True) 
    name = models.CharField(max_length=100, db_index=True) 
    lat = models.FloatField(db_index=True) 
    lon = models.FloatField(db_index=True) 

は私の新しいオブジェクトを作成するために私のラムダです:

tr_contact = lambda x: dict(first_name=x.firstname, 
          last_name=x.lastname, 
          owned_place=?) 

は基本的に私はowned_placeのために取得したいものがCRecordに含まれている場所です。私が苦労しているのは、連絡先ごとにいくつかのレコードがあり、各レコードにはいくつかの場所があるという事実です。所有されたフィールドは、すべてのレコードに含まれるすべての場所と等しくなければなりません。

私はいくつかを試してみたとさえ実際にそれが一つのリクエストで可能であるのか疑問に思っ...

+0

あなたは何をしようとしていますか?新しいオブジェクトを作成しているのか、いくつかのオブジェクトをフィルタリングしていますか?どのタイプのオブジェクトを作成/フィルタリングしようとしていますか?あなたの質問は、これらの詳細については明確ではありません。 – AKS

+0

フィルタリングしようとしています。私が作成について話す部分は、テンプレートに関して厳密に言えば、あなたは正しいです、それは実際にはっきりとはわかりません。私はフィルタリングしようとしています。すべての連絡先をフィルタリングし、各レコードのすべての場所を取得したい(連絡先が複数ある可能性があります) – bottus

+0

このフィルタリングを実行しようとしている関連コード(ビューまたは関数)を含めてください。 – AKS

答えて

1

Jus'tが...何をここでやっていることは基本的にvaluesまたは(values_list)を再作成されていません。

ここでの違いは、あなたのアプローチが必要以上に多くのコストがかかるクエリ全体のルックアップを解決していることであるので、上記のいずれかを使用して...

my_records_queryset.values('firstname', 'lastname', 'place') 

またはあなたがDjango Rest Framework and serializersに見えるしたいと思うかもしれリレーショナルフィールドでどのような値を返すかをより詳細に制御できます。

関連する問題