Python 在Django中的一个查询中获取多个对象

Python 在Django中的一个查询中获取多个对象,python,django,Python,Django,我有3种型号: class Ticket(models.Model): id = models.CharField(primary_key=True, max_length=20, null=False) title = models.CharField(max_length=255, blank=False, null=True) description = models.TextField(blank=False, null=True) class Attachme

我有3种型号:

class Ticket(models.Model):
    id = models.CharField(primary_key=True, max_length=20, null=False)
    title = models.CharField(max_length=255, blank=False, null=True)
    description = models.TextField(blank=False, null=True)

class Attachment(models.Model):
    ticket = models.ForeignKey(Ticket, on_delete=models.CASCADE)
    file = models.FileField(blank=True, null=True, upload_to='attachments/')

class Comment(models.Model):
    ticket = models.ForeignKey(Ticket, on_delete=models.CASCADE)
    comment = models.TextField(null=False)
在中的my views.py文件中,我希望处理所有视图,因此为了获得它们,我执行了3个查询:

tickets = Ticket.objects.filter(id=ticket_id)
attachments = Attachment.objects.filter(ticket=ticket_id)
comments = Comment.objects.filter(ticket=ticket.id)
我只想访问数据库一次,所以我的问题是如何在一个查询中获得它们?我已经阅读了有关方法的内容,但是附件评论模型之间没有直接的关联,因此我无法从任何一个模型开始查询。另一方面,票证模型没有像附件评论这样的字段,因此我无法从中开始查询。

尝试使用,例如:

注意:您必须添加与外键相关的内容

# models.py    
class Attachment(models.Model):
        ticket = models.ForeignKey(Ticket, on_delete=models.CASCADE, related_name='attachment')
        file = models.FileField(blank=True, null=True, upload_to='attachments/')
    
    class Comment(models.Model):
        ticket = models.ForeignKey(Ticket, on_delete=models.CASCADE, related_name='Comment')
        comment = models.TextField(null=False)


#your query

from django.db.models import Prefetch
    
    tickets = Ticket.objects.prefetch_related(Prefetch('attachment', to_attr='ticket_attachment'), Prefetch('comment', to_attr='ticket_comment'))

print(ticket.first().ticket_attachment.all())

我认为除非关系声明给第一个被调用的对象,否则不可能为3个模型生成一个查询?您可以执行类似结果=链(票据、附件、注释)的操作。