2014-06-30 116 views
1

已经找到相关答案,但找不到涵盖我的具体需求的任何内容。我只使用Django约2周。已经尝试过教程和Django文档。在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) 

管理形式允许我来过滤系列流由 是我要做的表现期。当我尝试添加系列流时,我会得到我想输入系列,日期,值的三个字段 。问题是,下拉菜单 是否提供了数据库中所有系列的选项。我想要筛选 下拉菜单,以便系列流量进入页面,以便它只显示相关系列。 显示的系列名称会在不同的基金和绩效期间重复使用 因此下拉菜单很混乱!已过滤的效果时间段位于 的表格中,因此它是无法使用的。只是不知道如何筛选它。

网址为系列流量过滤和流量入口形式有:

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

回答

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')