当前位置: 首页 > 面试题库 >

过滤Django管理中的foreignkey字段

濮阳鸿祯
2023-03-14
问题内容

我有以下模型:

class Entity(models.Model):
       name=models.CharField(max_length=100)

class Theme(models.Model):
   name=models.CharField(max_length=100)
   entity=models.OneToOneField(Entity)

class Company(models.Model):
    name=models.CharField(max_length=100)
    theme=models.OneToOneField(Theme,null=True,blank=True)

我想在管理员中theme添加时过滤字段Company,如下所示:

class CompanyAdmin(admin.ModelAdmin):
   def queryset(self, request):
      qs = super(CompanyAdmin, self).queryset(request)
      qs.theme.queryset = Theme.objects.filter(name__iexact='company')
      return qs

admin.site.register(Company, CompanyAdmin)

我已经尝试了很多东西,但是没有任何效果!我怎样才能做到这一点?


问题答案:

使用render_change_form方法:

class CompanyAdmin(admin.ModelAdmin):
    def render_change_form(self, request, context, *args, **kwargs):
         context['adminform'].form.fields['theme'].queryset = Theme.objects.filter(name__iexact='company')
         return super(CompanyAdmin, self).render_change_form(request, context, *args, **kwargs)


 类似资料:
  • 问题内容: 说我的内容如下: 即有多个,每个都有一个和的范围。每个数据库都应有一个从其父数据库中选择的基础,而不是另一个。 创建用于添加的表单时,我想删除选择(因为已经通过页面上的“添加客户端”按钮Rate选择了该选项),并且也将选择限制于此。 我该如何在Django 1.0中做到这一点? 目前,我当前的文件只是样板文件: 而且也是基本的: 在Django 0.96中,我能够通过在渲染模板之前进行

  • 问题内容: 说我的内容如下: 即有多个,每个都有一个和的范围。每个数据库Client都应有一个Rate从其父数据库中选择的基础,而不是另一个。 创建用于添加的表单时,我想删除选择(因为已经通过页面上的“添加客户端”按钮选择了该选项),并且也将选择限制于此。 我该如何在Django 1.0中做到这一点? 目前,我当前的forms.py文件只是样板文件: 而且views.py也是基本的: 在Djang

  • 问题内容: 我有一个模型和,就像这样: 现在我有了一些和对象,我想得到一个查询,该查询选择所有指向少于2的对象。 A就像一个池子,用户(B)加入池。如果仅加入1或0,则根本不应该显示该池。 这样的模型设计可能吗?还是我应该修改一下? 问题答案: 听起来像是一份工作。 如果B计数通常是您需要的过滤或排序标准,或者需要显示在列表视图中,则可以考虑通过将b_count字段添加到A模型并在添加B或添加B时

  • 问题内容: 如何使entry.category成为CategoryProxy的实例?有关详细信息,请参见代码: 从Category转换为CategoryProxy也是可以的,但是我对ORM内部结构以正确复制内部状态不是很熟悉… 编辑。 原因:我向CategoryProxy添加了方法,并想使用他: 编辑2. 目前,我是这样实现的: 但是看起来很糟糕… 问题答案: 在不访问数据库的情况下从模型类切换到

  • 问题内容: 我很难理解Django模型中的关系。 有人可以解释一下OneToOne,ManyToMany和ForeignKey之间的区别吗? 问题答案: 好吧,这里基本上有两个问题: 一对一,多对多和外键关系之间的区别(通常)是什么 它们对Django有什么区别。 通过简单的Google搜索,可以很容易地回答这两个问题,但是由于我在SO上找不到该问题的确切答案,因此我将继续回答。 请注意,在Dja

  • 从 Django 1.9(我知道,它不合规,因此升级)切换到 2.0。我看到on_delete是所有外键字段的必填字段。以前,当我从 Django Admin 中删除一个对象时,它会运行检查并确认我是否要删除我正在删除的对象中使用 FK 的记录。 关于新字段,如果我将它设置为cascade(之前的默认行为),它在删除之前是否仍然需要确认,或者如果我选择,我是否需要使用PROTECT,然后自己删除外