我的生產服務器上有一個奇怪的行爲。當我試圖通過逆轉外鍵過濾,然後我收到一個錯誤,這是不可能的,但在本地能正常工作,如:Django ORM無法通過反向外鍵過濾
class Foo(models.Model):
pass
class Bar(models.Model):
name = models.CharField()
foo = models.ForeignKey('Foo', related_name='bars', blank=True, null=True, default=None)
現在要做的:
Foo.objects.filter(bars__name=xyz)
將導致與
無法將關鍵字'bars'解析爲字段。選項包括:...
我使用Ubuntu 16.04和Django的1.8.7
編輯1: 能不能與該ForeignKeys使用字符串表示定義的事實呢?
編輯2: 我發現關係是用class not string來定義的,所以它不適用於這樣的關係。
基本上模型Foo
有很多ForeignKey
的關係。在Foo
很少,在目標模型很少。從Foo
角度運行查詢時,這些目標模型在生產時不存在。這些在Foo
可以用作查詢參數。
編輯3: 我收到了更詳細的服務器配置信息以及何時發生錯誤。
信息有關的生產設置,其中的問題被認爲是:
- Apache的版本:2.4.18-2ubuntu3.3
- 中的libapache2-MOD-WSGI版本:4.3.0-1.1build1
阿帕奇mpm_event配置:
StartServers 2
MinSpareThreads 25
MaxSpareThreads 75
ThreadLimit 64
ThreadsPerChild 25
MaxRequestWorkers 150
MaxConnectionsPerChild 0
Apache站點配置的有關部分:
WSGIDaemonProcess some_name group=some_name maximum-requests=1000 processes=2 threads=15 user=some_name
WSGIProcessGroup some_name
WSGIScriptAlias/"/usr/lib/python2.7/dist-packages/some_name/wsgi.py"
WSGIPassAuthorization On
基本上每個請求都不會發生錯誤。當它出現時,它來自一名工人。重新啓動Apache修復了一段時間的錯誤。
其中一個想法是,在加載Django模型時可能存在競爭條件。
的'fk'應該是'Foo'和相關的名稱'bars' –
應該是雙向的。 Withouth related_name查詢應該是過濾器(bar_set__name = xyz) – szaman
什麼是更多的本地一切似乎都很好。 – szaman