具有模型属性的 Django 管理 search_fields
我正在尝试使用模型中的属性作为 django admin (1.2) 中的字段。
这是我的代码的示例:
class Case(models.Model):
reference = models.CharField(_(u'Reference'), max_length=70)
client_read = models.BooleanField(default=0)
def __unicode__(self):
return self.case_id
@property
def case_id(self):
""" unique case ID """
number = (settings.CASE_ID_LENGTH - len(str(self.id))) * "0" + str(self.id)
return '%(year)s%(unique_id)s' % {
'year': self.case_date.strftime("%y"),
'month': self.case_date.strftime("%m"),
'unique_id': number}
以及 admin.py 的部分:
class OrderAdmin(ReadOnlyAdminFields, admin.ModelAdmin):
[...]
search_fields = ('id','case','req_surname','req_forename','req_company')
我可以将该字段引用为“case”(如示例中给出的那样),但这给了我一个 类型错误:相关字段具有无效的查找: icontains
当然,它以相关字段的方式工作:所以我可以使用 case__id,然后我就可以使用该 id 作为搜索查询。 但这对用户来说有点恼火,因为 caseid 显示不同。
有没有办法像显示的那样使用 case_id 作为搜索查询(年+月+id)?
I'm trying to use a property in my model as a field in django admin (1.2).
Here's an example of my code:
class Case(models.Model):
reference = models.CharField(_(u'Reference'), max_length=70)
client_read = models.BooleanField(default=0)
def __unicode__(self):
return self.case_id
@property
def case_id(self):
""" unique case ID """
number = (settings.CASE_ID_LENGTH - len(str(self.id))) * "0" + str(self.id)
return '%(year)s%(unique_id)s' % {
'year': self.case_date.strftime("%y"),
'month': self.case_date.strftime("%m"),
'unique_id': number}
and the part of admin.py:
class OrderAdmin(ReadOnlyAdminFields, admin.ModelAdmin):
[...]
search_fields = ('id','case','req_surname','req_forename','req_company')
I can refer to the field as 'case' (like given in the example), but this gives me a TypeError: Related Field has invalid lookup: icontains
Of course it's working the way with related fields: so I can use case__id and then I'm able to use the id as search query.
But this is somewhat irritating to the users cause the caseid is shown different.
Is there a way to use the case_id as search query like it's shown (year+month+id)?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
不,您不能以这种方式使用它,因为这只适用于表示数据库中的列的属性,而不适用于属性。实现此目的的唯一方法是使用
contrib.admin.views.main.ChangeList
的子类作为更改列表,并覆盖它的get_query_set
方法以实现所需的行为!No you cannot use it that way, because this only works with attributes that represent columns in the database, not with properties. The only way to make this work would be using a subclass of
contrib.admin.views.main.ChangeList
for the change list and overwrite it'sget_query_set
method to achieve the desired behaviour!