让我们克隆一个包含多到多个字段的django模型实例
django-cloneable的Python项目详细描述
Django可克隆
django cloneable提供具有^{tt2}的CloneableMixin类$ 方法。它可以混合到任何django模型中。
必须对已保存的实例(一个 已设置pk。然后它返回模型的一个新实例,该实例包含 与原始实例相同的字段值,但它将是一个单独的数据库 具有不同主键的行。
例如:
fromdjango.dbimportmodelsfromdjango_cloneableimportCloneableMixinclassIngredient(CloneableMixin,models.Model):name=models.CharField(max_length=50)is_spicy=models.BooleanField(default=False)classPizza(CloneableMixin,models.Model):name=models.CharField(max_length=50)price=models.IntegerField()ingredients=models.ManyToManyField(Ingredient)tomatos=Ingredient.objects.create(name='Tomato',is_spicy=False)cheese=Ingredient.objects.create(name='Cheese',is_spicy=False)chili=Ingredient.objects.create(name='Chili',is_spicy=True)margarita=Pizza.objects.create(name='Margarita')margarita.ingredients.add(tomatos)margarita.ingredients.add(cheese)diabolo=margarita.clone(attrs={'name':'Diabolo'})diabolo.ingerdients.add(chili)# Nothing has changed on the original instance.assertmargarita.name=='Margarita'assertmargarita.ingredients.all()==[tomatos,cheese]# The original m2m values were copied, and the new values were added.assertdiabolo.name=='Diabolo'assertdiabolo.ingredients.all()==[tomatos,cheese,chili]
如示例所示,您可以提供应替换的attrs。 在克隆的对象中。这样就可以在克隆的实例获得 保存的。默认情况下,克隆将保存到数据库中,以便 pk返回时。
有很多关于如何修改克隆逻辑的钩子。最好的方法 了解它们就是看看 CloneableMixin。
发展
使用以下命令安装依赖项(包括测试依赖项):
pip install -r requirements.txt
然后您可以使用以下命令运行所有测试:
tox
更改日志
0.1.0
- 初次发布。