Python Django Admin未保存保留在初始状态的预填充内联字段
我有一些自定义管理代码,它初始化了一些内联子对象 如果用户编辑内联子对象的默认值之一,则在保存父对象时将创建该子元素 我假设Django正在检查值是否已从其Python Django Admin未保存保留在初始状态的预填充内联字段,python,django,django-admin,Python,Django,Django Admin,我有一些自定义管理代码,它初始化了一些内联子对象 如果用户编辑内联子对象的默认值之一,则在保存父对象时将创建该子元素 我假设Django正在检查值是否已从其初始值更改,并且仅当用户更改了值时才进行保存 是这样吗 如果用户选择不更改默认值,如何强制Django Admin创建默认值不变的内联子对象 class PrepopIpInlineFormSet(forms.models.BaseInlineFormSet): model = Ip def __init__(self, *
初始值更改,并且仅当用户更改了值时才进行保存
是这样吗
如果用户选择不更改默认值,如何强制Django Admin创建默认值不变的内联子对象
class PrepopIpInlineFormSet(forms.models.BaseInlineFormSet):
model = Ip
def __init__(self, *args, **kwargs):
super(PrepopIpInlineFormSet, self).__init__(*args, **kwargs)
initial = # calculate a set of default Ip model initial values
self.initial = initial
class PrepopIpInline(admin.options.InlineModelAdmin):
template = "admin/linked.html"
model = Ip
formset = PrepopIpInlineFormSet
fk_name = 'sim'
admin_model_path = None
show_url = True
def __init__(self, *args):
super(PrepopIpInline, self).__init__(*args)
if self.admin_model_path is None:
self.admin_model_path = self.model.__name__.lower()
def get_formset(self, request, obj=None, **kwargs):
formset = super(PrepopIpInline, self).get_formset(request, obj, **kwargs)
formset.request = request
return formset
def get_extra(self, request, obj=None, **kwargs):
if obj:
return 0
else:
return ApnGgsn.objects.all().count()
来源:
在ModelAdmin对象本身中,可以使用与save_相关的方法。然后,一旦完成,检查这些模型是否存在。如果它们不存在,就创建它们。它看起来像这样:
class ParentObjectAdmin(admin.ModelAdmin):
def save_related(self, request, form, formsets, change):
super(ParentObjectAdmin, self).save_related(request, form, formsets, change)
obj = form.instance
if form.is_valid() and not ChildObject.objects.filter(parent = obj).exists():
ChildObject.objects.create(name = ChildObject.default_name, parent = obj, ...)
完全公开:我不记得(对于新创建的ParentObject)是否会填充form.instance属性。我知道基础对象将在此时创建(因为save_模型是在save_相关之前调用的)
如果我对“obj=form.instance”的建议不起作用,您也可以通过基于表单数据中的唯一值进行查询来获取新对象
例如,不使用obj=form.instance,而是执行以下操作:
obj = ParentObject.objects.get(username = form.cleaned_data.get("username"))
obj = ParentObject.objects.get(username = form.cleaned_data.get("username"))