Django - 带有自定义非相关对象的admin_order_field

时间:2014-10-04 09:43:01

标签: django django-models django-admin django-queryset

如何在方法中使用admin_order_field,它具有相反的关系?

是否可以使用一些聚合查询集功能?

class Card(models.Model):
    serial_number = models.CharField(max_length=200)
    ...

class License(models.Model):
    expiration = models.DateTimeField('Expiration')
    card = models.ForeignKey('Card')
    ...

class Pc(models.Model):
    card = models.ForeignKey('Card')
    ...

class PcAdmin(admin.ModelAdmin):
    ...

    def expiration(self, obj):
        try:
            license = License.objects.get(card=obj.card, type="xxx")
            expiration = license.expiration

        except (License.DoesNotExist, TypeError):
            expiration = "N/A"

        return expiration
    expiration.short_description = _("Expiration")
    expiration.admin_order_field = ???

1 个答案:

答案 0 :(得分:3)

基本上,如果您可以按照字段的方式引用某些内容,则可以在admin_order_field中使用它。

因此,如果您想按Card's serial_number订购,可以说`admin_order_field ='card__serial_number'。

或者,如果您想使用注释,您可以通过首先定义创建注释的get_queryset()方法来实现;然后使用新的注释名称作为admin_order_field

但在你的情况下,你不能这样做。问题是对type="xxx"的限制;使用字段表示法无法表示该逻辑。

但是,可以使用extra()来定义包含所需信息的自定义字段,然后将其用作admin_order_field