¿Es posible actualizar un campo y al guardarlo debería guardar otros campos con nuevos cambios?
Por ejemplo, tengo el siguiente modelo,
class Backup(models.Model): user=models.ForeignKey(User) title=models.CharField(max_length=200) is_approve=models.BooleanField(default=False) is_bad=models.BooleanField(default=False) country=models.CharField(max_length=100) Ahora, mi objetivo principal es simplemente hacer que el campo is_approve sea True . Mi objetivo secundario es actualizar otros campos junto con el campo is_approve , en caso de que el usuario realice cambios antes de hacer clic en el botón approve en la plantilla.
@staff_member_required def activate_moderation(request, backup_id=None): if id: vpostmod=get_object_or_404(Backup, id=backup_id) vpostmod.is_approve =1 vpostmod.save() ¿Cómo puedo conectar instancias de todos los campos junto con save(), para realizar los cambios después de establecer is_approve en True.
ACTUALIZACIÓN A LA PREGUNTA DE DANIEL
El modelo tiene un ModelForm 'Backup'. Los formularios se procesan a través del administrador de Django (BackupAdmin) utilizando el mismo modelo de formulario de "copia de seguridad".
Pasé el enlace de mi botón invocando el lugar change_form en mi carpeta admin/app_name/modelname/.
def render_change_form(self, request, context, *args, **kwargs): backup= self.get_object(request, self.backup_id) context.update({'backup':backup}) return super(BackupAdmin, self).render_change_form(request, context, *args, **kwargs)Y la plantilla de formulario de cambio es así:
{% block submit_buttons_bottom %} <div class="submit-row"> {% if backup.is_approve %} <p>pass</p> {% else %} <a href="{% url 'activate_moderation' backup.id %}" class="historylink"> <input type="button" value="{% trans 'Approve' %}" name="_approvebutton" /></a> <input type="button" value="{% trans 'Reject' %}" name="_rejectbutton" /> {% endif %} </div> {{ block.super }} {% endblock %}Tienes varias opciones.
El primero es sobrescribir el método de guardar en el modelo de copia de seguridad:
#Backup def save(self, *args, **kwargs): if self.pk: previous_Backup = Backup.objects.get(self.pk).is_approve super(Backup, self).save(*args, **kwargs) if self.pk and self.is_approve != previous_Backup: #make changesEl segundo es la función vinculante para publicar la señal de guardado + el rastreador de campo de utilidades del modelo django :
@receiver(post_save, sender=Backup) def create_change_backup(sender,instance, signal, created, **kwargs): if created: previous_Backup = get it from django model utils field tracker #make changes