On Mon, Aug 15, 2011 at 4:51 AM,
in...@webbricks.co.uk <in...@webbricks.co.uk> wrote:
I want to display the Level of the Category that the product belongs
to, in the admin page for the Product. snipped a lot of the
unimportant fields out of the display below.
class Category(models.Model):
name = models.CharField(max_length=50, default=False)
level = models.IntegerField(help_text="1, 2 ,3 or 4")
class Product(models.Model):
category = models.ForeignKey(Category)
name = models.CharField(max_length=100)
prepopulated_fields = {'slug': ('name',)}
fieldsets = [
('Product Info',{'fields': ['name',
'slug','partno','description']}),
('Categorisation',{'fields': ['brand','category']}),
You can do this so long as you only want to display the level, and not change it from the Product edit page. Admin was not designed to allowed editing of related-model attributes so you cannot do that. But with readonly fields you can easily display information:
1 - Define a method on Product that returns the information you want, eg:
def category_level(self):
try:
return u'%s' % self.category.level
except Category.DoesNotExist:
return u'No Category'
(You need to allow for Category not existing since it will not exist on an add page.)
2 - Include that method in readonly_fields and wherever you want it in your fieldsets, eg:
class ProductAdmin(admin.ModelAdmin):
readonly_fields = ['category_level']
fieldsets = [
('Product Info',{'fields': ['name', etc etc etc ]}),
('Categorisation',{'fields': ['category', 'category_level']}),
]
Karen
--
http://tracey.org/kmt/