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

Nio*_*rko 2 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 = ???
Run Code Online (Sandbox Code Playgroud)

Kev*_*nry 5

基本上,如果你可以用你做一个字段的方式来引用一些东西,你可以在admin_order_field.

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

或者,如果您想使用注解,您可以首先定义一个get_queryset()创建注解的方法;然后使用新的注释名称作为您的admin_order_field.

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

但是,可能可以使用extra()您想要的信息来定义自定义字段,然后将其用作您的admin_order_field.