table:
CREATE TABLE `host` ( `id` int(11) NOT NULL AUTO_INCREMENT, `cmdb_sn` varchar(32) NOT NULL, `internal_ip` varchar(16) NOT NULL, `external_ip` varchar(16) NOT NULL, `idc_name` varchar(16) NOT NULL, `status` enum('online','unused','repair') DEFAULT 'unused', `description` varchar(32) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8 CREATE TABLE `service` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `host_id` int(11) unsigned NOT NULL, `port` int(10) unsigned NOT NULL, .... PRIMARY KEY (`id`), UNIQUE KEY `host_id` (`host_id`,`port`), ) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=latin1
model:
class Host(models.Model): # id=models.IntegerField(max_length=10) cmdb_sn= models.CharField(max_length=32) internal_ip= models.CharField(max_length=16) external_ip= models.CharField(max_length=16) idc_name= models.CharField(max_length=16) status = models.IntegerField(max_length=10) description = models.CharField(max_length=32) def __unicode__(self): return '%s' %(self.internal_ip) class Meta: db_table = 'host' ordering=['internal_ip'] class Service(models.Model): host = models.ForeignKey(Host) port= models.IntegerField(max_length=10) role= models.IntegerField(max_length=10) status= models.IntegerField(max_length=10) description = models.CharField(max_length=32) def __unicode__(self): return '%s id:%s host:%s' %(self.port,self.id,self.host) class Meta: db_table = 'service' ordering=['port'] admin: class ServiceAdmin(admin.ModelAdmin): list_display = ('port', 'host','role','status','description') search_fields = ('id','port', 'host,'role','status')
service页面查询host时出错related Field has invalid lookup: icontains
改 search_fields =('id','port', 'host__internal_ip','role','status') ok~
class ServiceAdmin(admin.ModelAdmin):
list_display = ('port', 'host','role','status','description')
search_fields = ('id','port', 'host__internal_ip','role','status')
Related Field has invalid lookup: icontains。
原来外键查询是需要指定相应的字段的。外键不只是一个model,而该是另一个表的明确的一个字段。
所以我们需要指定特定的字段 "本表外键字段__外键所在表需查询字段"
参考:http://code.djangoproject.com/ticket/2331
Closing as Ian stated it was an error on his part. Ian: If there's still a problem with Django that needs to be fixed, please reopen.
This error raised if use search_fields in admin.py. E.x:
You must use:
Maybe must raise properly exception?
转自:http://hi.baidu.com/%C3%CE%C0%EF%CF%E3%B0%CD%C0%AD/blog/item/2f93659050f9d799a877a4c6.html