Guardar many to many Django

399 views
Skip to first unread message

tatiana...@gmail.com

unread,
Apr 12, 2019, 7:23:07 PM4/12/19
to Django users

Hola, tengo una duda acerca de como guardar many to many en Django , agradecería mucho sus ayudas



En la tabla de artículos cargo los datos, luego quiero asociarlos con la tabla temas, pero cuando hago el save me sale este error


Guardo primero todos los articulos.


TypeError: Direct assignment to the forward side of a many-to-many set is prohibited. Use articulo.set() instead.


Busque el error y ya instacio el id del articulo que guarde, pero me sigue saliendo el mismo error:

 de esta manero lo guardo

   


     articulo_data = Articulo.objects.get(id=dato) #instancia de articulo


        #TAGS

        taglist =  []

        for tag in tags: 

            tags = Tag.objects.get(id=tag)

            taglist.append(tags)

        print(taglist)


        #TEMAS

        temalist =  [] 

        for topic in topics_array:

            tema = Tema.objects.get(nombre=topic)

            temalist.append(tema)

        print(temalist)


        save = Articulo_Consolidacion.objects.create(articulo=articulo_data,tagicNone, tono=array_tono, tema__id=None)






Estos son mis 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)

    proyecto = models.ManyToManyField('Proyecto')

    finished = models.BooleanField(verbose_name=u'Finalizado', default=False)

    asignado = models.BooleanField(verbose_name=u'Asignado', default=False)

    state = models.BooleanField(verbose_name=u'Para borrar', default=False)

    recategorisation = models.BooleanField(verbose_name=u'Recategorizar', default=False)

    history = HistoricalRecords()

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


class Articulo_Consolidacion(models.Model):

    state = models.BooleanField(verbose_name=u'Prueba', default=False)

    articulo = models.ManyToManyField('Articulo')

    tag = models.ManyToManyField('tag')

    tema = models.ManyToManyField('Tema')

    tono = models.ManyToManyField('Tono')

    narrativa = models.ManyToManyField('Narrativa')

    nivelpromocion = models.ManyToManyField('NivelPromocion')

    posicion = models.ManyToManyField('Posicion')

    brand_love = models.ManyToManyField('BrandLove')

    promocion = models.ManyToManyField('Promocion')

    created_at = models.DateTimeField(auto_now_add=True)

    updated_at = models.DateTimeField(auto_now=True)

    history = HistoricalRecords()

    id_comentario = models.CharField(max_length=255,null=True)

------------------------------------------
class Tema(models.Model):
    nombre = models.CharField(max_length=255)
    history = HistoricalRecords()
---------------------------------------------





Captura de pantalla de 2019-04-12 18-07-56.png

Captura de pantalla de 2019-04-12 18-07-56.png

Vijay Khemlani

unread,
Apr 13, 2019, 1:55:54 PM4/13/19
to django...@googlegroups.com
Esta línea

Articulo_Consolidacion.objects.create(articulo=articulo_data,tagicNone, tono=array_tono, tema__id=None)

No tiene mucho sentido (que es tagicNone?, de donde sale arrary_tono? no estas usando tag_list ni tema_list...)

Ademas en tu modelo el campo "articulo" de "ArticuloConsolidacion" es un ManyToManyField pero le estas asignando una instancia especifica en tu llamado a create ("articulo=articulo_data")

Lo único que te puedo decir es que primero crees y guardes la instancia de ArticuloConsolidacion SIN setear los campos ManyToMany, y despues de eso llamar al metodo set de sus campos manytomany para setear esos campos despues

Saludos

--
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/743469b3-1fbf-4002-8d9e-4dd01e37e948%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Tatiana Mesa

unread,
Apr 13, 2019, 2:59:31 PM4/13/19
to django...@googlegroups.com
Hola Vijay, agradezco tu respuesta,

Tienes razon, los campos los puse en None porque el erro me lo genera el campo de articulo=articulo_data

Articulo_Consolidacion.objects.create(articulo=articulo_data, tag=taglist, tono=array_tono, tema__id= temalist  )

Aun no entiendo bien como funciona los set, te agradecería si me regalaras un ejemplo. 

Adicional no se si es correcto o se puede guardar un array o lista al momento de hacer el save, en el caso de taglis y temalist.

Agradezco mucho tu ayuda.






Reply all
Reply to author
Forward
0 new messages