Quiero crear un sistema de me gusta/seguir en las publicaciones de los usuarios.
Debido a que a muchos usuarios les puede gustar una publicación y a los usuarios les pueden gustar muchas publicaciones, hice 2 modelos separados.
Modelos.py:
class Question(models.Model): user= models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE) title = models.TextField() content = models.TextField() date_published = models.DateTimeField(auto_now_add=True) last_modified = models.DateTimeField(_('Last Edited'), auto_now=True) slug = models.SlugField(max_length=255) class Question_Follows(models.Model): question = models.ForeignKey(Question, on_delete=models.CASCADE) user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE) count = models.IntegerField(default=0)vistas.py
class QuestionDetailView(DetailView): model = Question slug = 'slug' template_name = "questions/question_detail.html" def get_context_data(self, **kwargs): context = super(QuestionDetailView, self).get_context_data(**kwargs) context['now'] = timezone.now() #obj= Question_Follows.objects.filter(id=question.id) #context['follow_count'] = Question_Follows.objects.filter(id='question.id') #obj.count <----- none of these have worked so far. return contextvista detallada.html:
<div id="question_container"> <input type='hidden' id="{{ object.id }}" name="id"> <--- tried this as a way to get question id --> <h1>{{ object.title }}</h1> <p>{{ object.content }}</p> <p>Published: {{ object.date_published|date }}</p> <p>Date: {{ now |date }}</p> <button class="follow"><span id='follow-span'>Follow| <strong id='follow-count'>{{ follow_count }}</strong> </button> </span></button>Tengo problemas para 'recopilar' la pregunta correcta una vez que se ha presionado el botón Me gusta y también para mostrar el número correcto de Me gusta para la pregunta, es decir, el recuento de seguimiento para cada pregunta.
Algunos puntos:
count = models.IntegerField(default=0) en el modelo Question_Follows . Se crea una nueva fila en la tabla de la base de datos para este modelo cada vez que un usuario sigue una pregunta. ¿Puede un usuario seguir la misma pregunta más de una vez? Si no, entonces no necesita un campo de conteo.El número de seguidores para la pregunta debería estar disponible en la vista usando algo como:
def get_context_data(self, kwargs):
context = super(QuestionDetailView, self).get_context_data(**kwargs) context['now'] = timezone.now() context['follow_count'] = self.object.follows.count() return context Tenga en cuenta que deberá agregar un nombre relacionado a su clave externa, por lo que será question = models.ForeignKey(Question, on_delete=models.CASCADE, related_name='follows') para que esto funcione.
Question_Follows sería QuestionFollow .Consulte mi comentario para obtener más preguntas relacionadas con los problemas de su plantilla. Sospecho que solo está utilizando el nombre de archivo de plantilla incorrecto.