меня следующим образом, у меня есть модель Producto
, что одно поле является внешним ключом к другой модели под названием Categoria
так:Populate выпадающий список другой списка в Джанго с FormSets
class Categoria(models.Model):
nombre = models.CharField(max_length=500)
description = models.TextField(blank=True)
imagen = models.ImageField(upload_to="/media/categorias", blank=True)
class Producto(models.Model):
referencia = models.CharField(max_length=30)
nombre = models.CharField(max_length=500)
cantidad = models.IntegerField()
precio_unidad = models.FloatField(blank=True)
cantidad_en_pedido = models.IntegerField(blank=True)
descatalogado = models.BooleanField(blank=True)
proveedor = models.ForeignKey(Proveedor,related_name="proveedor",blank=True,null=True)
categoria = models.ForeignKey(Categoria,related_name="categoria",blank=True,null=True)
imagen = models.ImageField(upload_to="/media/productos", blank=True)
Таким образом, когда пользователь хочет сделать заказ Мне нужно сделать выпадающий список для Categoria
, поэтому, когда пользователь делает выбор, другой раскрывающийся список - это фильтр со списком продуктов, основанных на этой категории, что-то вроде выпадающего списка для стран и городов в форме регистрации из многих веб-сайтов в Интернете, для этого я сделал modelformset_factory для деталь заказа, где i nsertion продукта происходит:
PedidoForm = modelform_factory(Pedido, exclude=("producto",),formfield_callback=make_custom_datefield)
DetallePedidoFormSet = modelformset_factory(Detalle_Pedido,exclude=("unidad_precio","pedido",), extra=1)
И это представление для получения формы заказа:
def add_pedido(request):
if request.POST:
pedido_form = PedidoForm(request.POST, prefix='pedido')
detalle_pedido_formset = DetallePedidoFormSet(request.POST, prefix='detalle_pedido')
if pedido_form.is_valid() and detalle_pedido_formset.is_valid():
pedido = pedido_form.save()
nuevos_detalles_pedido = detalle_pedido_formset.save(commit=False)
for nuevo_detalle_pedido in nuevos_detalles_pedido:
nuevo_detalle_pedido.unidad_precio = nuevo_detalle_pedido.producto.precio_unidad
nuevo_detalle_pedido.pedido = pedido
nuevo_detalle_pedido.save()
detalle_pedido_formset.save_m2m()
return HttpResponseRedirect("/ventas/pedidos")
#else:
# form_errors = form.errors
# return render_to_response("ventas/form.html", {'form_errors':form_errors,'form':form},
# context_instance=RequestContext(request))
else:
pedido_form = PedidoForm(prefix='pedido')
detalle_pedido_formset = DetallePedidoFormSet(queryset=Detalle_Pedido.objects.none(),prefix='detalle_pedido') # or give a different initial queryset if you want some preselected choice
extra_context = {'form_pedido': pedido_form, 'detalle_pedido_formset': detalle_pedido_formset}
return render_to_response("ventas/form_pedido.html", extra_context,
context_instance=RequestContext(request))
Как можно определить это в моих FormSets, многие сайты предложить делания ModelChoiceField
, но я не знаю, как определить для набора форм, любые идеи?
С уважением!