Django 關聯關係查詢
Django 中的每一中關聯關係都可以是實現反向查詢,我們對三種關係的關聯反向查詢依次進行介紹,其實只要掌握了其中一種,大家就可以領悟反向的查詢是如何進行應用的。
範例
以 Order 和 OrderItem 這兩個 Model 為例,OrderItem 有一個 ForeignKey 指向 Order。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| class Order(models.Model): user = models.ForeignKey(User, on_delete=models.SET_NULL, null=True) paymentMethod = models.CharField(max_length=200, null=True, blank=True) ........ def __str__(self): return str(self.createdAt)
class OrderItem(models.Model): product = models.ForeignKey(Product, on_delete=models.SET_NULL, null=True) order = models.ForeignKey(Order, on_delete=models.SET_NULL, null=True) ....... def __str__(self): return str(self.name)
|
在 OrderSerializer 中,我們想透過反向查詢,來取得 OrderItem 的資料,並且將其序列化。
1 2 3 4 5 6 7 8 9 10 11 12 13
| class OrderSerializer(serializers.ModelSerializer): orderItems = serializers.SerializerMethodField(read_only=True) shippingAddress = serializers.SerializerMethodField(read_only=True) ....... class Meta: model = Order fields = '__all__' def get_orderItems(self,obj): items = obj.orderitem_set.all() serializer = OrderItemSerializer(items,many=True) return serializer.data .........
|
當在 OrderItem 模型中定義一個指向 Order 的外鍵字段時,如上所述(order = models.ForeignKey(Order, on_delete=models.CASCADE)
),Django 會自動在 Order 模型中創建一個反向關系。這個反向關系的名稱默認是小寫的模型名稱(在這里是 orderitem)後面加上 _set(在這里是 orderitem_set)。
也可以通過在模型中定義 related_name 屬性來覆蓋這個默認值。
若您覺得這篇文章對您有幫助,歡迎分享出去讓更多人看到⊂◉‿◉つ~
留言版