如何将相关对象添加到Admin索引视图?

时间:2009-09-22 21:46:32

标签: django django-admin

我希望能够在list_display视图中显示Image是否已与每个产品相关联。 我似乎遇到了麻烦,因为我正在处理一个相关的对象。

models.py

class ImageMain(models.Model):
    """This is the Main Image of the product"""
    product = models.ForeignKey(Product)
    photo = models.ImageField(upload_to='lcdtvs')  
    pub_date = models.DateTimeField('date published', auto_now_add=True)

class Product(models.Model):
   name = models.CharField(max_length=100)
   poll = models.ForeignKey(Poll)
   pub_date = models.DateTimeField('date published', auto_now_add=True)
   size = models.IntegerField(default=0)

admin.py

def photo_for_product(obj):
    images = obj.imagemain_set.all()
    return images[0].photo

class ProductAdmin(admin.ModelAdmin):
   list_display = ('name', "photo_for_product")
   inlines = [DescriptionInline, FeatureInline, AffiliateInline]

   def upper_case_name(self, obj):
       return ("%s" % (obj.name)).upper()

   def photo_for_product(self, obj):
       images = self.imagemain_set.all()
       return images[0].photo

admin.site.register(ImageMain)
admin.site.register(Product, ProductAdmin)

由于某种原因,upper_case_name()在列表视图中显示正常。 photo_for_product()只是一直显示(无)。

我也试过在photo_for_product方法中使用pdb,但是Django不喜欢这样。

我还尝试在ModelAdmin方法之前放置callable,但是,这会产生很多错误:

ProductAdmin.list_display[1], 'photo_for_product' is not a callable or an attribute of 'ProductAdmin' or found in the model 'Product'.

3 个答案:

答案 0 :(得分:2)

从您的问题中不清楚您想要输出的确切内容。你说你想知道“如果图像已经关联” - 如果是这样,你可以试试这个:

def photo_for_product(self, obj):
    images = self.imagemain_set.all()
    if images:
        return True
    else:
        return False
photo_for_product.boolean = True

如果你想真正看到图片,你需要返回一些HTML,它会在img标签中呈现它。

def photo_for_product(self, obj):
    images = self.imagemain_set.all()
    if images:
        return '<img src="%s">' % images[0].photo.url
    else:
        return ''
photo_for_product.allow_tags = True

答案 1 :(得分:1)

编写一个方法,以字符串形式返回必要的信息,并将方法的名称添加到管理类的list_displays中。

答案 2 :(得分:0)

我希望输出是图像路径的字符串。显然,问题是图像[0] .photo是ImageFieldFile而不是字符串。

默认情况下,ImageFieldFile似乎具有以下属性:
ImageFieldFile.name
ImageFieldFile.path
ImageFieldFile.url

所有这些属性都会返回unicode字符串。