1
class A(models.Model):
foreign = models.ForeignKey(B, unique=True)
我有上面的代碼 - 我如何確保在A的Admin下的下拉菜單中,對於'外部',我只提供了獨特的選擇?這只是爲了防止用戶違反唯一性約束並且以管理員錯誤消息呈現。如何限制Django中的下拉菜單管理
class A(models.Model):
foreign = models.ForeignKey(B, unique=True)
我有上面的代碼 - 我如何確保在A的Admin下的下拉菜單中,對於'外部',我只提供了獨特的選擇?這只是爲了防止用戶違反唯一性約束並且以管理員錯誤消息呈現。如何限制Django中的下拉菜單管理
請看ModelAdmin.formfield_for_foreignkey()here。缺點是不得不求助於raw SQL。
class AModelAdmin(admin.ModelAdmin):
def formfield_for_foreignkey(self, db_field, request, **kwargs):
if db_field.name == "foreign":
kwargs["queryset"] = B.objects.raw('SELECT * FROM myapp_a where not exists (select id from myapp_b where b.id=a.foreign_id')
return super(AModelAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)
恕我直言「非空非空白獨特FKs」看起來像重新考慮你的建模的好機會 - 可能合併兩個模型。每當我發現自己在Django中掙扎得太過分時,我就試圖做一些天真的事情。
不幸的是,這是行不通的,因爲管理模板無法正確顯示 - 我得到: 「在呈現時捕獲AttributeError:'RawQuerySet'對象沒有任何屬性'all'」 – cockadoodledo 2010-11-17 15:14:00
如果您打開http:// code.djangoproject.com/我可以發送一個補丁來向RawQuerySet添加一個dummy all()方法。 – 2010-11-17 22:47:26
您也可以嘗試:kwargs [「queryset」]。all = kwargs [「queryset」] .__ iter__ – 2010-11-17 22:53:42