Django: Actualice un solo campo en el modelo existente con forms.py

Necesito permitir que el usuario edite un campo para personalizar el nombre del campo con una ventana modal elegante. He estado tratando de revisar los tutoriales de AJAX, pero me está pasando un poco por la cabeza.

Mi HTML:

 

El botón y el elemento a editar:

 {{parameter.parameter_name_userdef}} 

El AJAX:

 $(document).ready(function() { $('.submit_parameter').click(function(el) { var parameter_name = $("#id_parameter_name_userdef").val(); var sensor_id = {{sensor.id}} $.post("{% url 'sensor' sensor.id %}", { csrfmiddlewaretoken: '{{csrf_token}}' }, function(data) { location.reload(); }).done(); }); }); 

La forma:

 class CustomParameterForm(ModelForm): parameter_name_userdef = forms.CharField(max_length=100) class Meta: model = SensorParameter fields = ['parameter_name_userdef'] 

La vista:

 class SensorInfoView(generic.DetailView): model = Sensor template_name = 'expert/sensor.html' def get(self, request, sensor_id): sensor = Sensor.objects.get(pk=sensor_id) chamber = Chamber.objects.get(sensor=sensor) sensor_parameters = SensorParameter.objects.filter(sensor=sensor) custom_param_form = CustomParameterForm() return render(request, self.template_name, {'sensor': sensor, 'chamber': chamber, 'custom_param_form': custom_param_form, 'sensor_parameters': sensor_parameters}) def post(self, request, sensor_id): instance = get_object_or_404(Sensor, id=id) form = CustomParameterForm(request.POST or None, instance=instance) if form.is_valid(): form.save() return redirect('next_view') return render(request, 'expert/sensor.html', {'custom_param_form': custom_param_form}) 

El modelo:

 class SensorParameter(models.Model): sensor = models.ForeignKey(Sensor) parameter = models.ForeignKey(Parameter) parameter_name_userdef = models.CharField(max_length=100, blank=False, default=parameter) live_value = models.FloatField() 

Ahora, el procedimiento parece sencillo, es la ejecución que no estoy captando.

  • Recupere las instancias de modelo relevantes con un GET (Hecho).
  • Haga un botón de edición que muestre el modo con el formulario (Hecho).
  • Haga un modal que muestre el formulario desde forms.py (Listo).
  • Escriba un poco de AJAX que enviará datos relevantes a la vista (¡No está hecho!)
  • Manejar la solicitud POST en la vista (¡No hecho!)

He estado leyendo algunos tutoriales, pero trato de seguir los pasos y todavía estoy seguro de cómo manejar el bit AJAX. Todavía soy nuevo en Django, y este también será mi primer bash con AJAX, así que no estoy seguro de haber cometido errores notorios de principiante.

¡Gracias por tu ayuda!

¿No puedes comprobar si está actualizado en el modelo?

 class SensorParameter(models.Model): sensor = models.ForeignKey(Sensor) parameter = models.ForeignKey(Parameter) parameter_name_userdef = models.CharField(max_length=100, blank=False, default=parameter) live_value = models.FloatField() __sensor = None __parameter = None __parameter_name_userdef = None __live_value = None def __init__(self, *args, **kwargs): super(SensorParameter, self).__init__(*args, **kwargs) self.__sensor = self.parameter_name_userdef self.__parameter = self.parameter self.__parameter_name_userdef = self.parameter_name_userdef self.__live_value = self.live_value def save(self, force_insert=False, force_update=False, *args, **kwargs): if self.sensor == self.__sensor and ( self.parameter_name_userdef != self.__parameter_name_userdef): super(SensorParameter, self).save(force_insert, force_update, *args, **kwargs) self.__parameter_name_userdef = self.parameter_name_userdef else: super(SensorParameter, self).save(force_insert, force_update, *args, **kwargs) self.__sensor = self.parameter_name_userdef self.__parameter = self.parameter self.__parameter_name_userdef = self.parameter_name_userdef self.__live_value = self.live_value 

Básicamente, lo que hice aquí es cuando un formulario crea un nuevo SensorParameter , luego enviará todos los valores, pero cuando ya haya un SensorParameter con esa ForeignKey , solo se actualizará el valor parameter_name_userdef .

Aunque también tendría que enviar el ForeignKey desde el sensor , porque quiere comprobar qué SensorParameter necesita actualizarse, supongo. Pero así es como se actualiza fácilmente solo 1 valor único en los modelos, si lo desea, también puede configurarlo para múltiples valores.