Guest User

Untitled

a guest
Jul 15th, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.66 KB | None | 0 0
  1. # models.py
  2. from django.db import models
  3.  
  4. class Campaign(models.Model):
  5. name = models.CharField(max_length=20)
  6.  
  7. def __unicode__(self):
  8. return unicode(self.name)
  9.  
  10. class Category(models.Model):
  11. campaign = models.ForeignKey(Campaign)
  12. name = models.CharField(max_length=20)
  13.  
  14. def __unicode__(self):
  15. return unicode(self.name)
  16.  
  17. class Account(models.Model):
  18. category = models.ForeignKey(Category)
  19. name = models.CharField(max_length=20)
  20.  
  21. def __unicode__(self):
  22. return unicode(self.name)
  23.  
  24. # admin.py
  25. from django.contrib import admin
  26. from models import Campaign, Category, Account
  27.  
  28. class CampaignAdmin(admin.ModelAdmin):
  29. list_display = ('name', 'related_accounts', )
  30.  
  31. def related_accounts(self, obj):
  32. from django.core import urlresolvers
  33. url = urlresolvers.reverse("admin:<yourapp>_account_changelist")
  34. lookup = u"category__campaign__exact"
  35. text = u"View Accounts"
  36. return u"<a href='%s?%s=%d'>%s</a>" % (url, lookup, obj.pk, text)
  37. related_accounts.allow_tags = True
  38. admin.site.register(Campaign, CampaignAdmin)
  39. admin.site.register(Category)
  40.  
  41. class AccountAdmin(admin.ModelAdmin):
  42. list_display = ('category', 'name')
  43. list_filter = ('category__campaign',)
  44. admin.site.register(Account, AccountAdmin)
  45.  
  46. admin/yourproject/account/?category__id__exact=<category.id>
  47.  
  48. def account_link(self, obj):
  49. return '<a href="/admin/yourproject/account/?category__id__exact=%s">Accounts</a>' % (obj.category.id)
  50.  
  51. account_link.allow_tags = True
  52.  
  53. list_display = ('account_link', ...)
  54.  
  55. from consensio.models import Account
  56. from django.contrib import admin
  57. from django.conf.urls.defaults import patterns, include, url
  58.  
  59. class AccountAdmin(admin.ModelAdmin):
  60. campaign_id = 0;
  61.  
  62. def campaign_account_list(self, request, campaign_id, extra_context=None):
  63. '''
  64. First create your changelist_view wrapper which grabs the extra
  65. pattern matches
  66. '''
  67. self.campaign_id = int(campaign_id)
  68. return self.changelist_view(request, extra_context)
  69.  
  70. def get_urls(self):
  71. '''
  72. Add your url patterns to get the foreign key
  73. '''
  74. urls = super(AccountAdmin, self).get_urls()
  75. my_urls = patterns('',
  76. (r'^bycampaign/(?P<campaign_id>d+)/$', self.admin_site.admin_view(self.campaign_account_list))
  77. )
  78. return my_urls + urls
  79.  
  80. def queryset(self, request):
  81. '''
  82. Filter the query set based on the additional param if set
  83. '''
  84. qs = super(AccountAdmin, self).queryset(request)
  85. if (self.campaign_id > 0):
  86. qs = qs.filter(category__campaign__id = self.campaign_id)
  87. return qs
Add Comment
Please, Sign In to add comment