Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # models.py
- from django.db import models
- class Campaign(models.Model):
- name = models.CharField(max_length=20)
- def __unicode__(self):
- return unicode(self.name)
- class Category(models.Model):
- campaign = models.ForeignKey(Campaign)
- name = models.CharField(max_length=20)
- def __unicode__(self):
- return unicode(self.name)
- class Account(models.Model):
- category = models.ForeignKey(Category)
- name = models.CharField(max_length=20)
- def __unicode__(self):
- return unicode(self.name)
- # admin.py
- from django.contrib import admin
- from models import Campaign, Category, Account
- class CampaignAdmin(admin.ModelAdmin):
- list_display = ('name', 'related_accounts', )
- def related_accounts(self, obj):
- from django.core import urlresolvers
- url = urlresolvers.reverse("admin:<yourapp>_account_changelist")
- lookup = u"category__campaign__exact"
- text = u"View Accounts"
- return u"<a href='%s?%s=%d'>%s</a>" % (url, lookup, obj.pk, text)
- related_accounts.allow_tags = True
- admin.site.register(Campaign, CampaignAdmin)
- admin.site.register(Category)
- class AccountAdmin(admin.ModelAdmin):
- list_display = ('category', 'name')
- list_filter = ('category__campaign',)
- admin.site.register(Account, AccountAdmin)
- admin/yourproject/account/?category__id__exact=<category.id>
- def account_link(self, obj):
- return '<a href="/admin/yourproject/account/?category__id__exact=%s">Accounts</a>' % (obj.category.id)
- account_link.allow_tags = True
- list_display = ('account_link', ...)
- from consensio.models import Account
- from django.contrib import admin
- from django.conf.urls.defaults import patterns, include, url
- class AccountAdmin(admin.ModelAdmin):
- campaign_id = 0;
- def campaign_account_list(self, request, campaign_id, extra_context=None):
- '''
- First create your changelist_view wrapper which grabs the extra
- pattern matches
- '''
- self.campaign_id = int(campaign_id)
- return self.changelist_view(request, extra_context)
- def get_urls(self):
- '''
- Add your url patterns to get the foreign key
- '''
- urls = super(AccountAdmin, self).get_urls()
- my_urls = patterns('',
- (r'^bycampaign/(?P<campaign_id>d+)/$', self.admin_site.admin_view(self.campaign_account_list))
- )
- return my_urls + urls
- def queryset(self, request):
- '''
- Filter the query set based on the additional param if set
- '''
- qs = super(AccountAdmin, self).queryset(request)
- if (self.campaign_id > 0):
- qs = qs.filter(category__campaign__id = self.campaign_id)
- return qs
Add Comment
Please, Sign In to add comment