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