model,admin,table如下service页面查询host时出错related Field has invalid lookup: icontains
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=utf8CREATE 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.
comment:6Changed?21 months?ago by AntonBessonovThis error raised if use search_fields in admin.py. E.x:
class AnotherModel(models.Model):txt = models.CharField(_('Text'), max_length=255)??class MyModel(models.Model):prop = models.ForeignKey(AnotherModel)You must use:
class MyModelAdmin(admin.ModelAdmin):search_fields = ('prop__txt')Maybe must raise properly exception?
转自:http://hi.baidu.com/%C3%CE%C0%EF%CF%E3%B0%CD%C0%AD/blog/item/2f93659050f9d799a877a4c6.html