Django admin search_fields со свойством модели - PullRequest
3 голосов
/ 16 сентября 2010

Я пытаюсь использовать свойство в моей модели как поле в 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' (как указано в примере), но это дает мне TypeError: Related Field имеет недействительный поиск: icontains

Конечно, он работает со связанными полями: поэтому я могу использовать case__id , а затем я могу использовать идентификатор в качестве поискового запроса.Но это несколько раздражает пользователей, потому что caseid показывается по-другому.

Есть ли способ использовать case_id в качестве поискового запроса, как показано (год + месяц + идентификатор)?

1 Ответ

4 голосов
/ 17 сентября 2010

Нет, вы не можете использовать его таким образом, потому что это работает только с атрибутами, которые представляют столбцы в базе данных, а не со свойствами. Единственный способ сделать эту работу - использовать подкласс contrib.admin.views.main.ChangeList для списка изменений и переписать его get_query_set методом для достижения желаемого поведения!

...