`

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=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.

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

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics