Update many to many django

176 views
Skip to first unread message

tatiana...@gmail.com

unread,
Apr 8, 2019, 7:40:59 PM4/8/19
to Django users
Hola, me gustaría saber de que manera se hace un update cuando tengo una relación de muchos a muchos en django, apreciaría mucho sus ayudas :)

Luis Zárate

unread,
Apr 8, 2019, 10:11:12 PM4/8/19
to django...@googlegroups.com
Hola,

Las relaciones M2M pueden trabajarse de diferentes formas, acá está la doc de django

Si lo que quieres es hacer algo rápido puedes usar un model form factory

del  modelo que desear y luego relacionarlo con el objeto que quieras por ejemplo

Si lo único que necesita es relacionarlos porque los tiene ya creados entonces puede hacer  un formulario y usar un campo como ModelMultipleChoiceField (https://docs.djangoproject.com/en/2.2/ref/forms/fields/#django.forms.ModelMultipleChoiceField)

Si puedes dar un mejor ejemplo de lo que quieres hacer le podemos ayudar más.
Saludos.





El lun., 8 abr. 2019 a las 17:40, <tatiana...@gmail.com> escribió:
Hola, me gustaría saber de que manera se hace un update cuando tengo una relación de muchos a muchos en django, apreciaría mucho sus ayudas :)

--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users...@googlegroups.com.
To post to this group, send email to django...@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/64971258-aa7b-4a4b-9532-94f0272e94a3%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


--
"La utopía sirve para caminar" Fernando Birri


Tatiana Mesa

unread,
Apr 9, 2019, 7:29:36 AM4/9/19
to django...@googlegroups.com
Hola Luis, eres muy amable en responderme tan rápido, mi pregunta puntual es de que manera puedo hacer un update en una tabla de muchos a muchos.


Estos son mis dos modelos


class Articulo(models.Model):
    titulo = models.CharField(max_length=255, blank=True)
    texto = models.TextField()
    url = models.CharField(max_length=255)
    fuente = models.ForeignKey(Fuente, on_delete=models.CASCADE) #
    fecha = models.DateTimeField(null=True)
    created_at = models.DateTimeField(auto_now_add=True, auto_now=False, verbose_name=u'Fecha de creación')
    ubicacion = models.CharField(max_length=255)
    tipo_facebook = models.CharField(max_length=255)
    id_articulo_facebook = models.CharField(max_length=255,blank=True, null=True)

----------------------------


class Articulo_Consolidacion(models.Model):
    articulo =  models.ForeignKey(Articulo, on_delete=models.CASCADE)
    tag = models.ForeignKey(Tag, on_delete=models.CASCADE)
    tono = models.ForeignKey(Tono, on_delete=models.CASCADE)
    tema = models.ForeignKey(Tema, on_delete=models.CASCADE)

quedo muy atenta a tu respuesta.

Muchas gracias


Luis Zárate

unread,
Apr 9, 2019, 10:40:48 AM4/9/19
to django...@googlegroups.com
Vamos a ver si entiendo ya que sus modelos no describen una relacion many to many, voy a intentar decirlo con palabras y luego con código.

Un articulo puede tener varios articulos consolidados y un articulo consolidado puede estar asociado a varios articulos.

Si esto es así sus modelos no representan eso.

Podrias pensar en algo como

Class Articulo:
   ...
   consolidados = models.ManyToManyField(Articulo_consolidado)

Ahora si lo que quieres es hacer una es insertar en la relación puedes hacer algo como

articulo = Articulo(...)
articulo.save()
articulo.consolidados.add(instancia de articulo consolidado)

Saludos
>> <https://ci3.googleusercontent.com/proxy/WdPtbUbeH_L4c__ddaOFaZN4KCPNu6PQbuGhVEbv2LEWA5AIuSpogax1BPPdwm7Y8d4gGqUtvXP2UyHT43Tpv7GDJ51fTZ3J_ndcwZFSnAgAF3vML7osyFtBZlU9weSVsJ1eV3K06I3nH1QnTj4L-nhYBv3uPs0zj3OzSiLW77J-VXUqalBUpU8mG3-RIUx6v6NJGxnxuDQ=s0-d-e1-ft#https://docs.google.com/uc?export=download&id=0B4-s_Bgz_-NSN0V3b24zU25fMW8&revid=0B4-s_Bgz_-NSdy9OTkYzcDN6RGZITWl5amdqT3JxVnNVVSswPQ>

>>
>> --
>> You received this message because you are subscribed to the Google Groups "Django users" group.
>> To unsubscribe from this group and stop receiving emails from it, send an email to django-users...@googlegroups.com.
>> To post to this group, send email to django...@googlegroups.com.
>> Visit this group at https://groups.google.com/group/django-users.
>> To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/CAG%2B5VyM2J5y9WrUC9YPwJ6PeH6zNboJK%3D4hAScVDFAB%2B6vsMjA%40mail.gmail.com.
>> For more options, visit https://groups.google.com/d/optout.
>
> --
> You received this message because you are subscribed to the Google Groups "Django users" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to django-users...@googlegroups.com.
> To post to this group, send email to django...@googlegroups.com.
> Visit this group at https://groups.google.com/group/django-users.
> To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/CAHAr%3D_21PiVzQD%2B_q5D-ynGmYffZB4YQjAaGmGJdPeNEvhKoUg%40mail.gmail.com.

Karen Tatiana Mesa Lopez

unread,
Apr 9, 2019, 6:34:54 PM4/9/19
to django...@googlegroups.com
Hola Luis, creo que no formule bien mi pregunta,sere mas explicita, agradezco tu paciencia

image.png

quiero realizar un update a la tabla articulo_consolidacion, donde en esa tabla un articulo puede tener muchos temas, muchos tags y muchos tonos, quiero saber como se puede hacer el update en la tabla articulo consolidación.

estos son mis modelos

image.png

image.png


Te agradezco mucho tu ayuda, si aun no soy clara me gustaria tener un ejemplo de como hacer uptdates en las relaciones,

Muchas Gracias :) 




For more options, visit https://groups.google.com/d/optout.


--
-- 

Tatiana Lopez

Desarrolladora Junior


Tel: +57 (1) 235 3061 - 235 1508

Cel: 3162466258

Calle 59 # 6 - 36 Oficina 601

@buho_media

www.buho.media

Luis Zárate

unread,
Apr 9, 2019, 11:56:03 PM4/9/19
to django...@googlegroups.com
Viendo los modelos mi recomendación sería, primero guardar el articulo consolidado con los campos requeridos.
Recuerde que los M2M nunca son obligatorios para guardar un modelo, de hecho en general uno primero guarda el modelo y luego relaciona.

Ahora si lo que quieres es hacer una pantalla donde se actualice el modelo completo, mi recomendación sería que con javascript y ajax crees las pantallas para la creación y actualización de cada modelo relacionado (osea Narrativa, NivelPromocion, Posicion, BrandLove, Promocion) y usando javascript e inputs de tipo hidden cree las relaciones.

algo como

class ArtConsolidado(forms.ModelForm):
    narrativa =MultipleChoiceField(widget=HiddenInput, ...)
    ...
    asi con todas las M2M

    class Meta:
         model= Articulo_Consolidado
         fields= '__all__'

Y con Javascript mantiene actualizados los id de cada relación.

Otras opción un poco más simple es usar algo como django-ajax-selects  para mantener las relaciones
aunque debe leer bien la doc para saber como permitir crear objetos con django-ajax-selects.

Saludos.




For more options, visit https://groups.google.com/d/optout.

Karen Tatiana Mesa Lopez

unread,
Apr 10, 2019, 9:04:33 AM4/10/19
to django...@googlegroups.com
Hola Luis, me alegra mucho leerte, si en una vista ya realizo ese proceso y se guarda de una buena manera, mi pregunta puntual es de que manera puedo actualizar datos, que ya estan guardados en ese modelo, un update de articulo consolidacion ej:

guarde un articulo que tiene dos temas asociados, ahora quiera hacer un update a esos dos temas, explicando en codigo aun no he encontrado las respuestas, serias de mucha ayuda :(,

Te lo agradezco mucho Luis.

Quedo muy atenta a tu respuesta.


For more options, visit https://groups.google.com/d/optout.

Luis Zárate

unread,
Apr 10, 2019, 11:39:34 AM4/10/19
to django...@googlegroups.com
Mira, por ejemplo usted necesita tiene un articulo consolidado y a este tiene relacionado 2 narrativas,

Si lo que quiere es actualizar las narrativas pues simplemente obtiene las narrativas como objetos independientes y los actualiza, algo como

narra1 = Narrativa.objects.get(pk=1)
narra1.loquesea = otroloquesea
narra1.save()

En este caso la relación no debería verse afectada.
En el caso de que quiera de forma más simple obtener las narrativas relacionadas

for narra in articuloconsolidado.narrativa.all():
     narra.loquesea = otroloquesea
     narra.save()

Ahora si lo que quiere es actualizar cuales narrativas forman parte de la relacción puede hacer algo como


narra1 = Narrativa.objects.get(pk=1)
narra2 = Narrativa.objects.get(pk=2)
articuloconsolidado.narrativa.add(narra1)

si lo que quiere es eliminarlo use algo como

articuloconsolidado.narrativa.remove(narra2)

Si lo que ocupa es hacer una actualización más rápida o solo de algunos campos puede se que sea más simple hacer algo como

Narrativa.objects.filter(pk=1).update(loquesea="algo para cambiar")

Saludos.



For more options, visit https://groups.google.com/d/optout.

Karen Tatiana Mesa Lopez

unread,
Apr 10, 2019, 6:23:57 PM4/10/19
to django...@googlegroups.com
Hola Luis, te agradezco fue de gran ayuda. 


For more options, visit https://groups.google.com/d/optout.

Karen Tatiana Mesa Lopez

unread,
Apr 10, 2019, 6:41:22 PM4/10/19
to django...@googlegroups.com
Hola Luis, tengo la ultima pregunta, te agradezco mucho tu ayuda

voy a realizar un for doble, mi pregunta puntual seria, 
los arreglos del for doble tienen que llevar la misma cantidad de datos ejemplo 

tema = ['1','2']
otro  = ['1','2']

for t ,o  in zip(tema,otro):
    print(t,o)

¿o pueden llevar diferentes longitudes?

De que manera puedo recorrer dos Array al mismo tiempo, con diferentes longitudes, para guardarlo en un solo save de Django.

tema = ['1','2']
otro  = ['1','2','3','4']

for t ,o  in zip(tema,otro):
    print(t,o)



Quedo muy agradecida por dedicar un poco de tu tiempo a mis preguntas.



















Luis Zárate

unread,
Apr 10, 2019, 8:02:02 PM4/10/19
to django...@googlegroups.com
Creo que zip está explicado acá


https://www.programiz.com/python-programming/methods/built-in/zip
> --
> You received this message because you are subscribed to the Google Groups "Django users" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to django-users...@googlegroups.com.
> To post to this group, send email to django...@googlegroups.com.
> Visit this group at https://groups.google.com/group/django-users.
> To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/CAFC_1o5RgYd7s-JPYgt1O41t6tugnuY6C795skQKGb3pp%2BE2-Q%40mail.gmail.com.
Reply all
Reply to author
Forward
0 new messages