Stack Overflow en español Asked by Nicolas Rivera on December 25, 2020
Estoy trabajando con django 3.1 y con python 3.8.5
en el models.py tengo creada la siguiente clase "Publicacion"
class Publicacion(models.Model):
codigo = models.AutoField(primary_key = True)
usuario = models.ForeignKey(User, on_delete = models.CASCADE)
contenido = models.TextField(null=True, blank=True)
comentarios = models.ManyToManyField(Comentario, blank = True)
fecha = models.DateField(auto_now_add=True)
reportes = models.ManyToManyField(User, blank = True, related_name='reportes')
favorito = models.ManyToManyField(User, blank = True, related_name='favorito')
republicacion = models.ManyToManyField('self', blank=True, symmetrical=False)
def path_img_publicacion(self, filename):
return f'cuentas/{self.usuario.username}/imagenes/publicaciones/{filename}'
imagen = models.ImageField(upload_to = path_img_publicacion, null = True, blank = True)
mientras que el metodo en donde estoy ocupando esta clase es el siguiente:
class RepublicarAPI(APIView):
authentication_classes = (TokenAuthentication,)
permission_classes = (IsAuthenticated,)
def post(self, request, codigo):
try:
usuario = User.objects.get(username = request.user)
publicacion = Publicacion.objects.get(codigo = codigo)
contenido = request.data['contenido']
fecha = request.data['fecha']
imagen = imagen=request.data['imagen']
publicaciones = publicacion.republicacion.all()
republicacion = Publicacion(usuario=usuario)
republicacion.contenido = contenido
republicacion.fecha = fecha
republicacion.imagen = imagen
for publicacion in publicaciones:
republicacion.republicacion.add(publicacion) #aca me salta al except
republicacion.save()
serializer = PublicacionSerializer(republicacion)
return Response(serializer.data, status=201)
except:
return Response(status = 400)
el error se produce cuando intento de agregar una publicacion al campo republicaciones
Debe usar el _set.all()
para los Many-to-Many
quedando como:
class RepublicarAPI(APIView):
authentication_classes = (TokenAuthentication,)
permission_classes = (IsAuthenticated,)
def post(self, request, codigo):
try:
usuario = User.objects.get(username = request.user)
publicacion = Publicacion.objects.get(codigo = codigo)
contenido = request.data['contenido']
fecha = request.data['fecha']
imagen = imagen=request.data['imagen']
publicaciones = publicacion.republicacion_set.all()
republicacion = Publicacion(usuario=usuario)
republicacion.contenido = contenido
republicacion.fecha = fecha
republicacion.imagen = imagen
republicacion.save() # debe estar ya saved antes de agregarle M2M relations
for publicacion in publicaciones:
republicacion.republicacion_set.add(publicacion) #aca me salta al except
# republicacion.save() # no es necesario aqui
serializer = PublicacionSerializer(republicacion)
return Response(serializer.data, status=201)
except:
return Response(status = 400)
Answered by WillyGuevara on December 25, 2020
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP