【发布时间】:2012-05-20 08:11:17
【问题描述】:
我有这两个模型和模型管理员。在可用主机用户列表中添加新主机时,只会出现未分配给另一台主机的主机用户。 问题是如果我编辑一个已经创建的主机,它的实际主机用户 ID 也会被过滤,所以我想做的是排除当前分配的主机用户 ID。 如何在从 hostuser 字段中排除当前 id 时指定?
我需要的语句写在*之间
提前致谢
模型.py
class HostUser(models.Model):
name = models.CharField(max_length=200)
{..More Data..}
class Host(models.Model):
{..More Data..}
hostuser = models.ForeignKey(HostUser, blank=True, null=True)
Admin.py
class HostAdmin(admin.ModelAdmin):
{..More Data..}
def render_change_form(self, request, context, *args, **kwargs):
list_names = Host.objects.values_list('hostuser__id', flat=True).exclude(hostuser__id=None).exclude(hostuser__id=**ACTUAL HOSTUSER_ID**)
list_names = [int(ids) for ids in list_names]
context['adminform'].form.fields['hostuser'].queryset = HostUser.objects.exclude(id__in=list_names)
return super(HostAdmin, self).render_change_form(request, context, args, kwargs)
【问题讨论】:
-
不会将
unique=True添加到您的 ForeignKey 实现相同的目标,但确保您不会在代码中犯错误吗? -
过滤器的应用有两个原因,第一个是禁用两个主机具有相同的hostuser,可以有效解决设置唯一性,但第二个原因是过滤器不会显示所有hostuser可供选择(可能是数百个)仅显示尚未分配的那些(它将是几个)。
-
如果您已解决问题,请将其作为答案发布,以便对其他人有所帮助。
标签: django django-admin django-modeladmin