Ich lerne gerade Django, und einige meiner Modelle verfügen über benutzerdefinierte Methoden, um Werte auf eine bestimmte Weise zu formatieren. Ist es möglich, den Wert einer dieser benutzerdefinierten Methoden zu verwenden, die ich als Eigenschaft in einem Modell mit order_by() definiert habe?Verwenden einer Django-Eigenschaft für benutzerdefinierte Modellmethoden in order_by()
Hier ist ein Beispiel, das zeigt, wie die Eigenschaft implementiert wird.
class Author(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=40)
email = models.EmailField(blank=True, verbose_name='e-mail')
def _get_full_name(self):
return u'%s %s' % (self.first_name, self.last_name)
full_name = property(_get_full_name)
def __unicode__(self):
return self.full_name
Mit diesem Modell, das ich tun kann:
>>> Author.objects.all()
[<Author: John Doh>, <Author: Jane Doh>, <Author: Andre Miller>]
>>> Author.objects.order_by('first_name')
[<Author: Andre Miller>, <Author: Jane Doh>, <Author: John Doh>]
Aber ich kann nicht tun:
>>> Author.objects.order_by('full_name')
FieldError: Cannot resolve keyword 'full_name' into field. Choices are: book, email, first_name, id, last_name
Was wäre die richtige Art und Weise zu verwenden order_by auf einer benutzerdefinierten Eigenschaft wie das?
Vielleicht 'F()' Objekte werden in diesem Fall arbeiten. Habe nicht getestet, aber vielleicht mit 'F ('first_name') + '' + F ('last_name')'? –
Um nach _multiple_ benutzerdefinierten Feldern mit 'sorted' zu sortieren, können Sie key = attrgetter verwenden, wie unter https://wiki.python.org/moin/HowTo/Sorting beschrieben – Chirael