При копировании объекта модели Django я всегда ожидал, что он не будет иметь идентичную идентификацию (также известный как первичный ключ) как исходный объект, с которого я копирую. Обычно вы делаете что-то вроде этого:Переопределение __copy__ для моделей Django?
copy = copy.copy(source)
copy.pk = None
copy.save()
Но я хотел бы сделать это автоматический, как это:
class MyModel(Model):
def __copy__(self):
result = MyModel.__new__(MyModel)
result.__dict__.update(self.__dict__)
result.pk = None
return result
Так что теперь я просто не могу сделать:
copy.copy(my_Model).save()
До сих пор это кажется работать. Однако, глядя на то, что Django делает с объектами модели в __init__
и __new__
, например, я продолжаю задаваться вопросом, действительно ли это разрешено и соответствует принципам Django. Удивительно, что модели Django, похоже, не переопределяют __copy__
.
Спасибо, matsjoyce, не знал. –