Django Admin: Заполнение полей администратора на основе выбора строки таблицы
Мне нужна помощь в импорте значений товаров (сохраненных в базе данных из предыдущих заказов) на основе поиска клиента по id. Это должно происходить после нажатия пользователем кнопки в панели администратора. Итак, при нажатии на кнопку 'Importar do histórico' Поля, которые нужно заполнить . откроется одно окно со всей историей элементов этого клиента (представленной в виде таблицы с помощью django_tables2) Таблица с результатами запроса по id клиента
Итак, когда я нажимаю на одну из строк таблицы, то значения должны заполнить поля внутри админ панели.
Ниже приведена часть моего 'admin.py'. Модель 'pedido_item' является инлайном модели 'pedido'.
class itensInline(admin.StackedInline):
form = pedidoItemForm
model = pedido_item
formfield_overrides = {
models.CharField: {'widget': TextInput(attrs={'size':'10'})},
models.Choices: {'widget': Select(attrs={'size':'20'})},
}
raw_id_fields = ('cd_pedido',)
radio_fields = {'cd_tipo_fixacao_encosto': admin.HORIZONTAL, 'cd_tipo_fundo_encosto': admin.HORIZONTAL, 'cd_tipo_cor_fundo_encosto': admin.HORIZONTAL,'id_montagem': admin.HORIZONTAL}
fieldsets = (
('Dados Obrigatórios', {
'fields': (('quantidade'),('modelo_ar','modelo_a'),('modelo_er','modelo_e'),'tecido','cd_tipo_fundo_encosto','cd_tipo_cor_fundo_encosto','cd_tipo_costura','cd_tipo_fixacao_encosto','fixacao_encosto')
}
),
('Tipo de Montagem',{
'fields' : ('id_montagem',)
}
),
('Montada em base',{
'classes' : ('base','pretty'),
'fields' : ('base', 'opcao_braco','braco')
}
),
('Somente Estofamento',{
'classes' : ('est','pretty'),
'fields' : ('porca_garra',)
}
),
)
class Media:
js = ('admin/js/vendor/jquery/jquery.js','admin/js/jquery.init.js','js/admin.js','js/importar.js','js/autorizarPedido.js','js/importarPopup.js')
extra = 0
def has_edit_permission(self, request):
return False
class processoInline(admin.StackedInline):
model = pedido_historico
exclude = ('observacao',)
extra = 0
def has_edit_permission(self, request):
return False
@admin.register(pedido)
class pedidoAdmin(admin.ModelAdmin, ExportCsvMixin):
formfield_overrides = {
models.CharField: {'widget': TextInput(attrs={'size':'20'})},
models.TextField: {'widget': Textarea(attrs={'rows':4, 'cols':60})},
}
readonly_fields = ('data_emissao','data_cadastro',)
list_display = ('cd_pedido', 'cd_cliente', 'cd_prioridade', 'id_status', 'data_cadastro','responsavel_capitalize')
list_display_links = ('cd_pedido', 'cd_cliente')
list_filter = ('cd_prioridade', 'cd_responsavel', 'id_status', 'data_cadastro', 'data_emissao')
ordering = ('cd_pedido',)
search_fields = ('cd_pedido__exact','cd_cliente__startswith')
raw_id_fields = ('cd_cliente',)
fieldsets = (
('Dados Obrigatórios', {
'fields': (('cd_cliente','data_cadastro'),'data_emissao',('data_producao','data_entrega'),'cd_responsavel',('id_status','cd_prioridade'))}),
('Outros detalhes',{
'classes':('collapse','extrapretty'),
'fields' : ('instrucao','observacao')
}),
)
actions = ['export_as_csv']
inlines = [itensInline]
Поиск вида:
def search(request):
results = []
id = request.GET.get('id')
if id is None:
id = None
else:
results = pedido_item.objects.filter(Q(cd_pedido__cd_cliente=id)).all()
itens_cliente = ItensClienteTable(results)
return render(request, 'technocomfort/searchForm.html', {'itens_cliente': itens_cliente})
Модальное окно, которое получает id из поля клиента (внутри админки) и передает в просмотр поиска с помощью AJAX.
(function ($) {
function windowpop(url, width, height) {
var left = (screen.width / 2) - (width / 2);
var top = (screen.height / 2) - (height / 2);
return window.open(url, "Importar do Histórico", "location=no,directories=no,menubar=no,scroolbars=no;toolbar=no,status=no,resizable=no,copyhistory=no,width=" + width + ",height=" + height + ",top=" + top + ",left=" + left + ",popup,rel=noreferrer");
}
function importarPopup(id) {
var width = '750px';
var height = '350px';
var url = '/search/?id=' + id;
$.ajax({
url: '/search/',
type: 'GET',
data: {'id':id},
success: function(data) {
windowpop(url, width, height);
}
});
}
$(document).ready(function(){
$("button.importar").on('click', function(){
var id = $('.vForeignKeyRawIdAdminField').val();
importarPopup(id);
});
});
})(django.jQuery);
Я уже пытался передать значения из представлений как параметры url, но безуспешно.