【问题标题】:How to relate two object lists?如何关联两个对象列表?
【发布时间】:2018-05-02 17:04:21
【问题描述】:

我有两个用外键关联的模型,pregunta 是对特定评论(评论)的问题。

models.py

class Comentario (models.Model):
    titulo = models.CharField(max_length=50)
    texto = models.CharField(max_length=200)
    autor = models.ForeignKey (Perfil, null=True, blank=True, on_delete=models.CASCADE)
    fecha_publicacion = models.DateTimeField(auto_now_add=True)
    tag = models.ManyToManyField(Tags, blank=True)

    def __str__(self):
        return (self.titulo)

class Pregunta (models.Model):
    descripcion = models.CharField(max_length=150)
    autor = models.ForeignKey (Perfil, null=True, blank=True, on_delete=models.CASCADE)
    fecha_pregunta = models.DateTimeField(auto_now_add=True)
    comentario_preguntado = models.ForeignKey(Comentario, null=True, blank=True)

    def __str__(self):
        return (self.descripcion)

我创建了一个视图,我只想显示有问题的 cmets 和问题本身。我创建了两个对象列表,一个带有 cmets,另一个带有问题。问题是我想在模板中显示第一条评论及其问题,然后是下一条评论及其问题...... 我不知道这是否应该在模板中完成,或者我需要改变我的观点。

views.py

def responder(request):
    comment = Comentario.objects.filter(id__in=Pregunta.objects.all().values_list('comentario_preguntado')).filter(autor=request.user)
    question = Pregunta.objects.filter(comentario_preguntado__in=comment)
    return render(request, 'home/responder.html', {'comment': comment, 'question': question})

【问题讨论】:

    标签: python html django templates view


    【解决方案1】:

    只需通过他们的ForeignKey 关系的related_name 访问评论员的preguntas:

    def responder(request):
        # use __isnull to filter for comments with existing preguntas
        # use prefetch_related to minimize db hits
        # use plural name to be semantically sound ;)
        comments = Comentario.objects\
            .filter(pregunta_set__isnull=False, autor=request.user)\
            .prefetch_related('pregunta_set')
        return render(request, 'home/responder.html', {'comments': comments})
    

    在模板中:

    {% for comment in comments %}
        # display comment stuff
        {% for pregunta in comment.pregunta_set.all %}
            # display pregunta stuff
        {% endfor %}
    {% endfor %}
    

    有关related_nameprefetch_relatedisnull 的文档。

    【讨论】:

    • 效果很好!非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多