2017-05-30 19 views
1

私は外部キーで接続された2つのモデルを持っています。外部キーとして注文モデルに書籍のISBNを導入する方法外部キーフィールドでフィルタリングするdjangoモデルを作成するには

Book 
isbn - this is a unique value 

Order 
book_isbn - this should refer to Book's isbn above. 
  1. 。私はbook_isbn = given_isbn ISBN(すなわち、フィルタOrderオブジェクトを与えている受注を照会したいですか?

答えて

0

あなたは

class Book(models.Model): 
    isbn = models.CharField(unique=True, primary_key=True, max_length=5) 
    #some fields.... 

class Order(models.Model): 
    book = models.ForeignKey(Book, related_name='orders') 
    #another fields.. 

、のようなモデルを行うことができます次に、あなたのようなクエリを行うことができます

  • given_isbn = 'some_value' 
    items = Order.objects.filter(book=given_isbn) 
    

    または指定された書籍のインスタンスに対して、

    orders = book.orders.all() 
    

    EDIT

    それとも、ブックモデルISBNフィールドからprimary_key=Trueを削除し、その後

    items = Order.objects.filter(book__isbn=given_isbn) 
    

    、などの クエリを行うことができ、Djangoは各オブジェクトインスタンスの自動インクリメントの主キーを提供します。

  • +0

    related_nameは必須ですか? Order.objects.filter(book = ) –

    +0

    としてフィルタクエリを直接使用することはできますか?関連する名前は逆のクエリを読みやすくするためです...それについて心配しないでください......はい、そうした注文オブジェクトをクエリできます... – zaidfazil

    +0

    私はdjangoによって与えられたauto idを変更しないので、私は最後の解決策を好む。 book__isbn = given_isbnを参照するとうまくいきました。 (2つのアンダースコア) –

    0

    モデル:

    class Book(models.Model): 
        isbn = models.CharField(primary_key=True, max_length=5) 
    
    class Order(models.Model): 
        book = models.ForeignKey(Book) 
        #another fields.. 
    

    ご希望の本を取得します。

    book = Book.objects.get(isbn=isbn) 
    

    書籍の関連オーダーを取得します。

    orders = book.order_set.all() 
    

    特定の本のすべての注文を返します。

    もう1つの方法:フィルタクエリによるすべてのレコードの単純なフィルタリング。

    order_qs = Order.objects.filter(book=book) 
    

    ありがとうございます。

    関連する問題