我有这段代码:
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个不同的字段,例如使用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')
我的主要问题是最后一个参数,这个参数是在数据库中创建记录时使用的字段名称。
如何操作?