Usando Django 1.11, uno de mis modelos es una matriz almacenada dentro de un campo django-jsonfield .
class MyModel(models.Model) id = models.AutoField(primary_key=True) name = models.CharField(max_length=100) core = JSONField(blank=True, null=True, default=None) Estoy usando ModelForm en un par de vistas para crear y editar nuevas instancias. Dentro de ModelForm, tomo prestado django.contrib.postgres.forms.SimpleArrayField para analizar la entrada en el campo.
Agregar un nuevo modelo está bien, pero en la versión de edición, la matriz se rellena previamente con lo que parece la representación __str__ (por ejemplo, una matriz de 1,2,3 se convierte en ['1','2','3'] .
Estoy solucionando esto analizando la matriz en initial= para cada formulario, pero prefiero hacerlo en un solo lugar (SECO) en lugar de tener que repetirlo dentro de cada instancia de vista y formulario.
¿Hay algún gancho o método (¿quizás un widget personalizado?) que signifique que puedo hacer esto solo una vez en el formulario o en otro lugar?
Fragmento de la vista actual con enfoque hacky usando initial= :
def edit_mymodel(id): current_instance = MyModel.objects.get(pk=id) if request.method == "GET": form = MyModelForm(instance=current_instance, initial={"core": ",".join(current_instance.core)} ) return render(request, 'network_manager/edit.html', {'form': form} )Puede anular __init__
class MyModelForm(ModelForm) def __init__(self, *args, **kwargs): super(MyModelForm, self).__init__(*args, **kwargs) self.initial['core'] = ",".join(self.instance.core)