У меня есть этот код:Как передать имя аргумента в качестве параметра?
hobbies2 = form.cleaned_data.pop('hobbies2')
PersonneHobby.objects.filter(personne=obj).delete()
for 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 the POST
except LookupError:
break # hack in the POST
у меня будет один и тот же код для 4-х различных полей, Exemple с programme
:
programmes2 = form.cleaned_data.pop('programmes2')
PersonneProgramme.objects.filter(personne=obj).delete()
for 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
Точно такой же код, только имя изменения поля. Так что я хотел бы сделать обобщенную функцию и называть его так:
def update_field(post_field, class_field, **kwargs):
try:
values = form.cleaned_data.pop(post_field)
class_field.objects.filter(personne=obj).delete()
for 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')
Моя главная проблема заключается в последний параметр, который является именем поля, чтобы использовать при создании записи в базе данных.
Как это сделать?
Я обновил мой вопрос, используя kwargs, вы увидите, что я имею в виду. –