我有Chart
和模塊模型(請參閱下面的代碼)。每個圖表都屬於一個模塊(通過ForeignKey
)。圖表可能有其他圖表parent
(另一個ForeignKey
)。我在管理員中想要的是,特定圖表上的parent
的下拉列表僅包含相同模塊中的圖表。Django admin:如何根據對象的(不是request.user)數據過濾ForeignKeyField小部件?
我正在尋找一個Python解決方案,而不是AJAX。這意味着在創建新圖表時,下拉列表必須是空的(沒有模型實例沒有選擇模塊),並且更改管理模塊不會更新parent
選項以匹配,直到保存模型。我確定。
有很多類似聽起來的問題(和答案),結果根據用戶篩選選項; ModelAdmin.formfield_for_foreignkey
將請求作爲參數獲取,因此您可以使用request.user
,但它沒有獲取模型實例。 (我使用Django 1.3。)
我的模型(高度簡化當然):
class Module(models.Model):
pass
class Chart(models.Model):
module = models.ForeignKey(Module)
parent = models.ForeignKey(Chart, blank=True, null=True)
class ChartAdmin(admin.ModelAdmin):
def formfield_for_foreignkey(self, db_field, request, **kwargs):
# I would like to do this, but have no "instance":
kwargs['queryset'] = Chart.objects.filter(module=instance.module)
return super(ChartAdmin, self).formfield_for_foreignkey(self, db_field, request, **kwargs)
admin.site.register(Chart, ChartAdmin)
很好,謝謝!我添加了一個編輯(在隊列中),以便它可以安全地創建實例(當self.instance.module產生一個DoesNotExist時)。 – Tikitu 2012-03-15 15:35:15