我有模特Books,Chapters和Pages.它们都是由User:
from django.db import models
class Book(models.Model)
author = models.ForeignKey('auth.User')
class Chapter(models.Model)
author = models.ForeignKey('auth.User')
book = models.ForeignKey(Book)
class Page(models.Model)
author = models.ForeignKey('auth.User')
book = models.ForeignKey(Book)
chapter = models.ForeignKey(Chapter)
Run Code Online (Sandbox Code Playgroud)
我想做的是复制现有的Book并将其更新User给其他人.皱纹是我也想复制所有相关模型实例的Book-它所有的Chapters和Pages以及!
当看到a时,事情变得非常棘手Page- 不仅新的Pages需要author更新他们的领域,而且他们还需要指向新的Chapter对象!
Django是否支持开箱即用的方式?复制模型的通用算法会是什么样的?
干杯,
约翰
更新:
上面给出的类只是一个例子来说明我遇到的问题!
我有一个带有多个ImageFields的Django模型.
在我设置的ModelAdmin类中save_as = True,这意味着管理页面有一个"另存为新"按钮,该按钮允许复制现有项目并将其另存为新项目.
但是,使用此按钮时,ImageFields不会重复,并且在新项目上保留为空白.
查看POST请求,我发现这些字段在发布数据中是空白的.
我已经考虑过覆盖Model类的save方法,并自己复制旧对象中的图像.但据我所知,我没办法告诉对象是"新的".我似乎也没有旧项目的ID,所以我无法从中获取旧图像.
有没有办法让这些图像字段重复?
编辑: 按请求添加示例代码.
仅使用一个模型创建了一个简约的应用程序.验证问题仍然存在.
models.py示例:
from django.db import models
class Person(models.Model):
face_image = models.ImageField(upload_to='images',
null=False,
blank=True)
Run Code Online (Sandbox Code Playgroud)
示例admin.py:
from django.contrib import admin
from testapp.models import Person
class PersonAdmin(admin.ModelAdmin):
save_as = True
admin.site.register(Person, PersonAdmin)
Run Code Online (Sandbox Code Playgroud) 我想创建一个允许我创建记录副本的Django Admin Action.
继承人的用例.
管理员单击要复制的应用中记录旁边的复选框.管理员从管理操作下拉菜单中选择"重复".管理员点击进入.Django admin使用新的id创建重复记录.页面被刷新,新的重复与id一起添加.管理员点击新的重复记录并对其进行编辑.管理员点击保存.
我疯了还是这是一个非常直接的管理行动?
我一直在使用这些文档作为参考:http://docs.djangoproject.com/en/dev/ref/contrib/admin/actions/
我在想这样的事情:
在我的应用程序:
def duplicate(modeladmin, request, queryset):
new = obj.id
queryset.create(new)
return None
duplicate.short_description = "Duplicate selected record"
Run Code Online (Sandbox Code Playgroud)
我知道那不对......但是我的想法很接近吗?