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