Hi Andrew, Do you have any luck on this. I need same functionality. On Nov 30 2009, 5:40 am, andreas schmid <a.schmi...@gmail.com> wrote: > Emily Rodgers wrote: > > > On Oct 13, 1:20 pm, andreas schmid <a.schmi...@gmail.com> wrote: > > >> thank you very much for pointing me to the right path!! > >> ill try to understand the behaviour and report about my progress... > > >> Andrew Ingram wrote: > > >>> I'm assuming you are doing this somewhere other than the admin, or in > >>> custom views, so I'll explain how the admin stuff works. > > >>> Basically, when you create thepopupwindowyou give it a name which > >>> can be used the uniquely identify the field that is using thepopup > >>> (some variant on the field id would be ideal). Your main page (not the > >>>popup) should also have a javascript function to be called after the > >>> new author is saved (in the case of django admin, this function is > >>> called dismissAddAnotherPopup and is in RelatedObjectLookup.js). > > >>> Now the clever part (which I had to hunt around for when I needed this > >>> functionality, you can find it around line 608 in > >>> django.contrib.admin.options.py), is that when you successfully save > >>> the new author, you return an HttpResponse that consists of nothing > >>> but a script tag that executes > >>> owner.yourFunctionName(window_name,new_object_id (in the case of the > >>> django admin this would be owner.dismissAddAnotherPopup), window_name > >>> is the unique identifier you passed in originally. > > >>> This causes the browser to execute the function in the ownerwindow > >>> (the one that created thepopup) with the parameters you specified - > >>> which includes the ID of the new object. Django's code also provides > >>> the representation string of the object so it can be added to the > >>> select box. > > >>> Then you just make your JS function close thepopupwith > >>> window_name.close(). > > >>> I may not have explained it that well, but the key parts are in > >>> RelatedObjectLookup.js and options.py (near line 608). > > >>> I hope this helps. > > >>> - Andrew Ingram > > >>> 2009/10/13 nabucosound <hecto...@gmail.com>: > > >>>> This is the default behaviour in Django Admin, dude... > > >>>> On Oct 13, 9:43 am, andreas schmid <a.schmi...@gmail.com> wrote: > > >>>>> hi, > > >>>>> how can i achieve a behaviour like in the admin backend where i can add > >>>>> a related object through apopupwindowand have it selectable after i > >>>>> saved the related form? > > >>>>> for example: > >>>>> im copleting the form book and i have to select the author but it doesnt > >>>>> exist yet... so i click on the + (add) button and apopupwindowappears > >>>>> where i create the editor object, and i can select it in the book form > >>>>> right after i saved and closed thispopupwindow. > > >>>>> can somebody point me to the code? > > >>>>> thank you in advance... > > > You might find this > > helpful:http://www.hoboes.com/Mimsy/hacks/replicating-djangos-admin/ > > > Em > > the tutorial is nice but i cant get it really working. the problem is > that thepopupopens but i get a: > > TypeError at /popadd/topics/ > > 'str' object is not callable > > Request Method: GET > Request URL: http://127.0.0.1:8000/de/popadd/topics/?_popup=1 > Exception Type: TypeError > Exception Value: > > 'str' object is not callable > > Exception Location: > /home/pepe/DEV/FSlabs/parts/django/django/core/handlers/base.py in > get_response, line 92 > > my views.projects ProjectForm: > > class ProjectForm(ModelForm): > topics = ModelMultipleChoiceField(Topic.objects, > required=False, widget=MultipleSelectWithPop) > technologies = ModelMultipleChoiceField(Technology.objects, > required=False, widget=MultipleSelectWithPop) > class Meta: > model = Project > exclude = ['author'] > > my views.handlePopAdd.py : > > from django.utils.html import escape > from django.contrib.auth.decorators import login_required > > from myapp.views.technologies import TechnologyForm > from myapp.views.topics import TopicForm > > def handlePopAdd(request, addForm, field): > if request.method == "POST": > form = addForm(request.POST) > if form.is_valid(): > try: > newObject = form.save() > except forms.ValidationError, error: > newObject = None > if newObject: > return HttpResponse('<script > type="text/javascript">opener.dismissAddAnotherPopup(window, "%s", > "%s");</script>' % \ > (escape(newObject._get_pk_val()), > escape(newObject))) > > else: > form = addForm() > > pageContext = {'form': form, 'field': field} > return render_to_response("add/popadd.html", pageContext) > > @login_required > def newTopic(request): > return handlePopAdd(request, TopicForm, 'topics') > > @login_required > def newTechnology(request): > return handlePopAdd(request, TechnologyForm, 'technologies') > > any suggestions?- Hide quoted text - > > - Show quoted text -
-- 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.