我是Django的初学者。我想从Django Admin创建一些ERP。
我的问题是我有一些功能需要从另一个模型A 中选择对象,然后使用模型A中的选定对象创建一个新的模型B (关系是多对一的)
示例
我有模型A 和模型B 。
让我们说我想创建模型B 。我必须转到模型A 的列表来选择对象(选中或选中),然后我提交列表以创建模型B 。之后,重定向(或使用其他方式)到用于创建模型B 的页面,其中包含我从模型A 中选择的所有对象。提交时,它将保存并创建模型B 的对象,该对象具有许多模型A 的对象。
我必须从列表中选择模型A 的对象,而不是从内联表单中搜索。
我尝试了几种方法,但没有成功。
这是我的代码(我从Django文档获得的一些代码和django/contrib/admin/options.py
方法中的changform_views
)
当我选择模型A 的对象并选择操作pass_cheque
时,它会重定向到用于创建模型B的视图(问题是我无法从ModelAdmin
获取views (B)
来创建管理表单。
admin.py
def pass_receive_cheque(modeladmin, request, queryset):
selected = request.POST.getlist(admin.ACTION_CHECKBOX_NAME)
ct = ContentType.objects.get_for_model(queryset.model)
return HttpResponseRedirect("/passcheque/receive/?ct=%s&ids=%s" % (ct.pk,",".join(selected)))
views.py
def pass_receive_cheque(request):
modeladmin = ??? #I don't know what i should do
opts = modeladmin.model._meta
app_label = opts.app_label
obj = None
add = True
ModelForm = modeladmin.get_form(request, obj)
initial = modeladmin.get_changeform_initial_data(request)
form = ModelForm(initial=initial)
formsets, inline_instances = modeladmin._create_formsets(request, modeladmin.model(), change=False)
adminForm = helpers.AdminForm(
form,
list(modeladmin.get_fieldsets(request, obj)),
modeladmin.get_prepopulated_fields(request, obj),
modeladmin.get_readonly_fields(request, obj),
model_admin=modeladmin)
media = modeladmin.media + adminForm.media
inline_formsets = modeladmin.get_inline_formsets(request, formsets, inline_instances, obj)
for inline_formset in inline_formsets:
media = media + inline_formset.media
return render(request, 'account_statement/passcheque.html', {
'title': 'PASS CHEQUE',
'site_header': 'HSL FINANCE',
'opts': opts,
'change': False,
'is_popup': False,
'save_as': True,
'has_delete_permission': False,
'has_add_permission': True,
'has_change_permission': True,
'add': add,
'adminform': adminForm,
'media': media,
'inline_admin_formsets': inline_formsets,
'errors': helpers.AdminErrorList(form, formsets),
})
感谢您的每一个答案和建议。