在Django管理员输入表单中过滤输入

时间:2014-06-30 09:35:55

标签: django django-admin

找到相关答案,但找不到任何涵盖我特定需求的内容。我只使用Django大约2周。已经尝试过教程和Django文档。

背景。我有一个不同资金的数据库。每个基金可以有不同的表现 周期。在每个表演期间,可以有不同的系列。每个演出期都可以 拥有其中定义的所有系列的流程。 设置了关系数据库,以便像这样过滤掉它。问题是 系列名称会在整个效果期间重复使用(有一个单独的唯一键)。

我的模型文件看起来像这样:

class SeriesFlow(models.Model):
    series= models.ForeignKey(Series)
    date = models.DateField('date for flow')
    value = models.FloatField('Flow pos inflow, neg outflow')
    def __unicode__(self):
        return str(self.series)

class Series(models.Model):
    perf_period = models.ForeignKey(PerformancePeriod)
    series = models.CharField(max_length=100)
    series_longname = models.CharField(max_length=200, blank=True)
    # more fields
    def __unicode__(self):
    return self.series

在admin.py文件中,我执行以下相关操作:

class SeriesFlowAdmin(admin.ModelAdmin):
    fields = ['series', 'date', 'value']
    list_display = ['series', 'date', 'value']
    list_filter = ['series__perf_period']   #nice __ syntax to go backwards

# and then registering the admin interfaces
admin.site.register(Fund, FundAdmin)
admin.site.register(PerformancePeriod, PerformancePeriodAdmin)
admin.site.register(Profit, ProfitAdmin)
admin.site.register(Series, SeriesAdmin)
admin.site.register(SeriesFlow, SeriesFlowAdmin)

管理表单允许我按性能期间过滤系列流程 是我想要做的。当我尝试添加一系列流程时,我得到了三个字段 我想输入系列,日期,价值。问题是,是下拉列表 为数据库中的所有系列提供选项。我想过滤 系列流进入页面的下拉列表,只显示相关系列。 显示的系列名称在不同的基金和表现期间重复使用 所以下拉是一团糟!过滤后的效果期间在网址中 形式,因此它是defiantely可用。只是无法弄清楚如何过滤它。

系列流过滤和流条目表单的URL是:

admin/fee/seriesflow/?series__perf_period__id__exact=3  
admin/fee/seriesflow/add/?_changelist_filters=series__perf_period__id__exact%3D3

我的过滤肯定仍然可用。现在想确保只显示相关系列。我添加屏幕截图,显示其他演出期间的系列也会显示在下拉列表中。

enter image description here

1 个答案:

答案 0 :(得分:0)

不要真正了解你的模特关系,但我认为你需要formfield_for_foreignkey

class SeriesFlowAdmin(admin.ModelAdmin):
    def formfield_for_foreignkey(self, db_field, request, **kwargs):                
        if db_field.name == 'series': kwargs['queryset'] = Series.objects.filter(series='xxx')