如何创建一个django模型来过滤外键字段

时间:2017-05-30 17:52:43

标签: django django-models

我有两个通过外键连接的模型。

Book
 isbn - this is a unique value

Order
 book_isbn - this should refer to Book's isbn above.
  1. 如何将Book的isbn作为外键引入Order模型。
  2. 我想查询给出isbn的订单(即过滤订单对象 book_isbn = given_isbn

2 个答案:

答案 0 :(得分: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()

修改

或者您可以从Book model isbn字段中删除primary_key=True并执行此操作 像

这样的查询
items = Order.objects.filter(book__isbn=given_isbn)

然后,Django为每个对象实例提供一个自动递增的主键。

答案 1 :(得分: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()

它将返回特定图书的所有订单。

另一种方法:通过过滤查询简单过滤所有记录。

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