i have code:
hobbies2 = form.cleaned_data.pop('hobbies2') personnehobby.objects.filter(personne=obj).delete() pk_str in hobbies2: try: hobby = tagtraduit.objects.get(pk=int(pk_str)) p = personnehobby.objects.create(personne=obj, hobby=hobby) p.save() except valueerror: break # hack in post except lookuperror: break # hack in post
i have same code 4 different fields, exemple programme
:
programmes2 = form.cleaned_data.pop('programmes2') personneprogramme.objects.filter(personne=obj).delete() pk_str in programmes2: try: programme2 = tagtraduit.objects.get(pk=int(pk_str)) p = personneprogramme.objects.create(personne=obj, programme=programme2) p.save() except valueerror: break # hack = tout stopper except lookuperror: break # hack = tout stopper
exactly same code, name of field change. i'd make generic function , call this:
def update_field(post_field, class_field, **kwargs): try: values = form.cleaned_data.pop(post_field) class_field.objects.filter(personne=obj).delete() pk_str in values: try: v = tagtraduit.objects.get(pk=int(pk_str)) p = class_field.objects.create(**{'personne': obj, field_name: v}) p.save() except valueerror: break # hack = tout stopper except lookuperror: break # hack = tout stopper except keyerror: pass update_field('programmes2', personneprogramme, 'programme') update_field('hobbies2', personnehobby, 'hobby')
my main problem last parameter, name of field use when creating record in database.
how it?
you arbitary number of keyword-arguments (**
) , insert calculated additional parameters inside function:
def update_field(field, update_this, **kwargs): ... kwargs[update_this] = tagtraduit.objects.get(pk=int(pk_str)) p = field.objects.create(**kwargs) ...
this allows call that:
update_field(personnehobby, 'hobby', personne=obj) update_field(personneprogramme, 'programme', personne=obj)
Comments
Post a Comment