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