我有模型Merchant和PhoneNumber. PhoneNumber具有 的外鍵Merchant,并且Merchant具有business_phone_number獲取電話號碼集中的第一個電話號碼的屬性。在 Django admin 中,對于Merchant模型,我business_phone_number在list_display. 雖然我放了prefetch_related(phonenumber_set),但它仍然查詢了PhoneNumber100 次。我究竟做錯了什么?這是簡化的代碼:
class PhoneNumber(models.Model):
...
merchant = models.ForeignKey("merchant.Merchant", on_delete=models.SET_NULL, null=True, blank=True)
...
class Merchant(models.Model):
...
...
@property
def business_phone_number(self):
number = self.phonenumber_set.first()
if number:
return number.phone_number
return None
然后在 Django 管理員中我有:
@admin.register(Merchant)
class MerchantAdmin(admin.ModelAdmin):
list_display = ("name", "business_phone_number", ...)
...
我已經輸入了get_queryset:
def get_queryset(self, request):
return super().get_queryset(request).prefetch_related("phonenumber_set")...
uj5u.com熱心網友回復:
db 中的成功queryset.first()。對于預取資料,您應該只使用prefetched_something.all(). 在你的情況下:
@property
def business_phone_number(self):
for number in self.phonenumber_set.all():
return number
或者你可以使用next().
@property
def business_phone_number(self):
return next((number for number in self.phonenumber_set.all()), None)
您可以使用self.phonenumber_set.all().iterator()而不是生成器,但我沒有將它與預取資料一起使用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/508736.html
上一篇:所有頁面的Django重定向
