Okay, I got it. There was a typo in the hard-coded url pattern. The following actually does not work: ** code ** (r'^/1/add_random_samurai/$', self.admin_site.admin_view( self.add_random_samurai)) ** /code **
But this does: ** code ** (r'^1/add_random_samurai/$', self.admin_site.admin_view(self.add_random_samurai)) ** /code ** Basically, I added an extra slash and that's why it wasn't picking it up. So to catch any number, I just use: ** code ** (r'^\d+/add_random_samurai/$', self.admin_site.admin_view(self.add_random_samurai)) ** / code ** I'm still not sure if this will create the samurai in the correct province. I think I can extract this information from the request though. We shall see. -Tim On Mon, Feb 22, 2010 at 12:08 AM, Timothy Kinney <timothyjkin...@gmail.com>wrote: > Okay, I've got such a button and I have copied a template from admin to > serve as a stand-in for it. I have created functions under ProvinceAdmin (in > myapp\admin.py) that look like: > > ** code ** > def ProvinceAdmin(admin.ModelAdmin): > # other stuff > > def add_random_samurai(self, request): > from django.http import HttpResponse > # do stuff > return HttpResponse("This is where the template will render.") > > def get_urls(self): > from django.conf.urls.defaults import patterns > urls = super(ProvinceAdmin, self).get_urls() > my_urls = patterns('', > (r'^/(?P<province_id>\d+)/add_random_samurai/$', > self.admin_site.admin_view(self.add_random_samurai)) > ) > return my_urls + urls > ** / code ** > > But I'm getting a ValueError: > invalid literal for int() with base 10: '1/add_random_samurai' > > If I hardcode: (r'^/1/add_random_samurai/$', > self.admin_site.admin_view(self.add_random_samurai)) > Then it works. > > So I think my regular expression is not picking up the right integer. Can > you help me re-write the regular expression to catch the province number? > > Or can I ignore the province number since I am presumably calling a > function from within the instance of the province I want to update? If so, > how do I tell the pattern matching to ignore that? > > -Tim > > > On Fri, Feb 19, 2010 at 5:21 PM, Peter Herndon <tphern...@gmail.com>wrote: > >> >> On Feb 19, 2010, at 5:51 PM, Timothy Kinney wrote: >> >> > So I have a nice little database now stocked with items and provinces. >> > I now want to generate random samurai and populate the database with >> > them. I can think of two ways to do this: >> > >> > 1) Through the admin interface. But how do I install a button that >> > will add a random samurai? Adding samurai is a built-in function on >> > the template, but the fields are always empty. Is there a >> > straightforward way to add another button called "Add Random Samurai" >> > that does the same thing but with the fields randomly filled from >> > appropriate choices? >> > >> > 2) Use a python script. This seems to have two possible methods: >> > a) Randomly generate samurai desired, output a JSON flatpage, and call >> > manage.py loaddata that_flatpage >> > >> > b) Randomly generate the samurai desired, access the database directly >> > and insert them using SQL syntax. (not very Django like) >> > >> > I have listed these in order of preference. Can someone tell me the >> > easiest way to implement a new admin button? I'm not even sure where >> > the admin templates are stored. :/ >> > >> > -Tim >> >> Hi Tim, >> >> Docs for overriding admin are here: >> http://docs.djangoproject.com/en/1.1/ref/contrib/admin/#overriding-admin-templates >> >> You will probably want to override the change_form.html template at >> whatever level is appropriate for your needs (Province, if you are adding >> Samurai to random rooms), and add a button "Generate Random Samurai". That >> button will be the submit for a form that points to a view you will write. >> That view should generate a random number, loop over that number, create a >> Samurai object and assign it to a randomly-chosen Room (pick a random number >> from 1 through the total number of rooms, get the room via "room = >> Room.objects.get(pk=<random number>"). You will need to add a URL that will >> tie together the view and the submit button. >> >> For an added bonus, add an IntegerField to your form allowing you to set >> an upper bound on the number of Samurai generated. >> >> An approach similar to 2b would be to implement a custom management >> command (skeletal docs here: >> http://docs.djangoproject.com/en/1.1/howto/custom-management-commands/#howto-custom-management-commandsbut >> Google for better examples) that would allow you to run "python >> manage.py create_samurai". That command would use the same logic as I >> outlined for the view, and create Samurai via the ORM and assign them to >> random Rooms. >> >> ---Peter Herndon >> >> -- >> You received this message because you are subscribed to the Google Groups >> "Django users" group. >> To post to this group, send email to django-us...@googlegroups.com. >> To unsubscribe from this group, send email to >> django-users+unsubscr...@googlegroups.com<django-users%2bunsubscr...@googlegroups.com> >> . >> For more options, visit this group at >> http://groups.google.com/group/django-users?hl=en. >> >> > -- You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to django-us...@googlegroups.com. To unsubscribe from this group, send email to django-users+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/django-users?hl=en.