Ошибка, которую вы имеете, означает, что многие поля, которые вы пытаетесь заполнить, управляются сквозной моделью.
В фрагменте вы вставили код, который должен быть через осведомленные модели чтобы слияние сработало, начинается L55:
# Migrate all many to many references from alias object to primary object.
for related_many_object in alias_object._meta.get_all_related_many_to_many_objects():
alias_varname = related_many_object.get_accessor_name()
obj_varname = related_many_object.field.name
if alias_varname is not None:
# standard case
related_many_objects = getattr(alias_object, alias_varname).all()
else:
# special case, symmetrical relation, no reverse accessor
related_many_objects = getattr(alias_object, obj_varname).all()
for obj in related_many_objects.all():
getattr(obj, obj_varname).remove(alias_object)
getattr(obj, obj_varname).add(primary_object) # this can't work
Вы должны предоставить merge_model_objects
словарь функций, в котором merge_model_objects
сможет выбрать функцию для построения сквозного класса.Скорее всего, этот код должен заменить последнюю строку фрагмента, который я взял выше.
Но вы также должны позаботиться о том, чтобы A1, A2 и C1, C2 могли быть равны, в то время как B1, B2 не совпадают 't, который текущий код тоже не обрабатывает.