繁体   English   中英

在django admin中通过ForeignKey过滤

[英]filter by ForeignKey in django admin

我有以下情况。 有一个项目模型和一个项目图像模型。

class Project(models.Model):
   name = models.CharField(max_length=300)
   ... #some more fields

class ProjectImage(models.Model):
   image = models.ImageField(upload_to = "uploads/")
   projekt = models.ForeignKey(Projekt)

现在,我想成为一个管理面板用户来过滤掉管理区域中没有任何图像的所有项目。

我已经设法在概览中有一个绿色或红色的图标,无论是否附加了图像。 它适用于模型管理员的自定义功能(这可能不是最快的解决方案,但工作正常)。

class ProjectAdmin(admin.ModelAdmin):
    def image(self, obj):
        img = "no"
        images = ProjectImage.objects.only('id',).filter(project=obj)
        if images:
            img = "yes"
        return "<img src='"+ADMIN_MEDIA_PREFIX+"img/admin/icon-"+img+".gif' />"

    list_display = ('name', 'bild')

但是AFAIK我不能使用类似的方法只返回一个布尔值并将其作为自定义过滤器传递。

我也看到了这个: http//twigstechtips.blogspot.ch/2010/10/django-create-custom-admin-model-filter.html但看起来自定义过滤器必须附加到模型字段和我在项目中没有图像字段。

我还有其他办法吗? 谢谢

从Django 1.4开始,你应该能够使用自定义列表过滤器 你想要这样的东西(未经测试):

from django.contrib.admin import SimpleListFilter

class HasImageFiter(SimpleListFilter):
    title = 'has image'
    parameter_name = 'has_image'

    def lookups(self, request, model_admin):
        return (
            ('Yes', 'Yes'),
            ('No', 'No'),
        )

    def queryset(self, request, queryset):
        if self.value() == 'Yes':
            return queryset.filter(...)
        if self.value() == 'No':
            return queryset.filter(...)

class ProjectAdmin(admin.ModelAdmin):
    list_filter = (HasImageFilter,)

我将让你编写你的查询集过滤(如果你遇到困难我会填写)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM