2015-11-18 3 views
-1

Моя система уведомлений имеет опцию «Удалить», это как «сделать как прочитано», тогда я хочу, чтобы пользователь выполнил действие «прочитал», просто отключился от своих уведомлений, а нет у обычного пользователя, который имеет это уведомление.удалить уведомление об уведомлении

Model.py

class Notificaciones(models.Model): 
    user = models.ManyToManyField(MiUsuario) 
    Tipo_de_notificaciones = ((1,'Ofertas'),(2,'Error'),(3,'Informacion')) 
    Tipo = models.IntegerField('Tipo de notificacion',choices=Tipo_de_notificaciones, default=3,) 
    titulo = models.CharField("Nombre de la notifiacion",max_length=50) 
    mensaje = models.TextField("Descripcion de la notificacion") 
    imagen = models.ImageField("Imagen de la notificacion",upload_to="notificaciones") 
    Fecha_Caducidad_notificacion = models.DateField("Fecha de caducidad",auto_now=False,auto_now_add=False) 
    Estado = models.BooleanField("Estado de la notificacion", default=False) 

и мои взгляды, где Войти удалить СЛУЧИЛОСЬ

views.py

def delete_notificaciones(request, notificaciones_id): 
    notifi = Notificaciones.objects.get(id=notificaciones_id) 
    notifi = Notificaciones.objects.filter(user=request.user.id) 
    notifi.Estado = True 
    for notifi in notifi: 
     notifi.save() 
    return HttpResponseRedirect('/') 

URL.py

url(r'^delete/(?P<notificaciones_id>\d+)/$', 'app.views.delete_notificaciones', name='Vulpini.co'), 

Почему бы не фильтровать пользователя и не сделать уведомление, как читать.

ответ

0
notifi = Notificaciones.objects.filter(user=request.user.id) 

user поле в вашей модели является объектом, а не поле, так что вы должны фильтровать, как это:

notifi = Notificaciones.objects.filter(user=request.user) 

Я думаю, вы должны изменить немного свой вид. Я предполагаю, что вы делаете мягкое удаление, меняя Estado на True.

Приведенный ниже код будет отмечать уведомления всех пользовательских прочитанным:

def delete_notificaciones(request, notificaciones_id): 
    notifi = Notificaciones.objects.get(id=notificaciones_id) # I don't know why you get this object 
    notifi = Notificaciones.objects.filter(user=request.user) # Here you get a QuerySet, not an object 

    # use update instead of iterate over the QuerySet 

    notifi.update(Estado=True) 

    return HttpResponseRedirect('/') 

Если вы хотите пометить как прочитанные только ток, пропускаемый ID уведомления, вы должны сделать simething подобное:

def delete_notificaciones(request, notificaciones_id): 
    notifi = Notificaciones.objects.get(pk=notificaciones_id, user=request.user) 
    notifi.Estado = True 
    notifi.save() 
    return HttpResponseRedirect('/') 
+0

Я только перезагрузил страницу и не удалял уведомление от пользователя –

+0

@ alfredohb.q Я обновил свой ответ – Gocht

+0

Я использую get 'ID', потому что поэтому я фильтрую уведомление, которое пользователь собирается« сделать как прочитано », но теперь когда я реализую ваш код все уведомления ' сделайте как прочитано', позвольте мне обновить код и показать ** url.py **, где удалить уведомление –

Смежные вопросы