读书人

model,admin,table如上service页面查询

发布时间: 2012-10-08 19:54:56 作者: rapoo

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 AntonBessonov

This 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

读书人网 >操作系统

热点推荐