搜索字段不起作用

时间:2015-01-16 12:11:23

标签: django python-2.7 search model admin

我正在使用django我的模型和管理部分下面给出

`Model.py'

 class Scrip_Master(models.Model):
    nse_markt_typ = models.CharField(max_length=35, editable=True)
    bse_markt_typ = models.CharField(max_length=35, editable=True)
    mcx_sx_markt_typ = models.CharField(max_length=35, editable=True)
    nse_symbol = models.CharField(max_length=35, editable=True)
    bse_symbol = models.CharField(max_length=35, editable=True)
    mcx_sx_symbol = models.CharField(max_length=35, editable=True)
    isin_code = models.CharField(max_length=35, editable=True)
    nse_series = models.CharField(max_length=35, editable=True)
    bse_series = models.CharField(max_length=35, editable=True)
    mcx_series = models.CharField(max_length=35, editable=True)
    nse_dt_listng = models.DateTimeField(editable=False,null=True)
    bse_dt_listng = models.DateTimeField(editable=False,null=True)
    face_value = models.DecimalField(max_digits=12, decimal_places=2, default=0.00, editable=True)

    def nse_date_listng(self):
        if self.nse_dt_listng is not None:
            return self.nse_dt_listng.strftime("%d/%m/%Y")
        else:
            return self.nse_dt_listng

Admin.py

   class Scrip_MasterAdmin(admin.ModelAdmin):
       list_display =   ('nse_markts_typ','nse_symbol','isin_code','nse_series','nse_date_listng','face_value')
       search_fields = ['nse_markt_typ','nse_symbol','isin_code','nse_series','nse_date_listng','face_value']

       def nse_markts_typ(self,obj):
           if MDfile.objects.filter(symbol=obj.nse_symbol).first():    
              nse_markt_typ = MDfile.objects.filter(symbol=obj.nse_symbol).first()   

              return nse_markt_typ.mkt_type
           else:
              return obj.nse_markt_typ

在此,nse_markt_typ列中没有任何类型的数据,它指的是另一个表中的另一列并填充结果。但是这里的问题是我的过滤器不能用于此字段,因为显示的数据不在数据库中,因此如何实现此字段的过滤 做任何人都知道解决方案??

1 个答案:

答案 0 :(得分:2)

nse_markt_typ列表中添加search_fields等属性并不容易。

是否可以更改模型以将外键添加到MDfile?然后,您可以使用双下划线__来搜索链接对象上的字段。

class Scrip_Master(models.Model):
    nse_markt_typ = models.ForeignKey(MDfile, blank=True, null=True)

class Scrip_MasterAdmin(admin.ModelAdmin):
   ...
   search_fields = ['nse_markt_typ__mkt_type', ...]

请注意,您无法在nse_markt_typ__mkt_type中使用list_display,因此您可能需要创建属性,或使用nse_markt_typ并为{{1}设置合适的__unicode__模型。