django - 姜戈 | 如何与两个模型建立反向关系
问题描述
我想做一个票务系统。我有主模型(TicketSystem)和一个包含用户消息的模型(TicketSystem_Messages)。
在模型中“TicketSystem_Messages”是模型“TicketSystem”的ForeignKey。
这是我的代码:
class TicketSystem(models.Model):
subject = models.CharField(_('Subject'),max_length=30, blank=False, default="N/A")
message = models.TextField(_('Message'), null=False, blank=False)
created_date = models.DateTimeField(_('Date'), default=datetime.utcnow().replace(tzinfo=utc))
fertig_date = models.DateTimeField(_('Date'), default=datetime.utcnow().replace(tzinfo=utc))
class TicketSystem_Messages(models.Model):
user_name = models.ForeignKey(User)
status = models.ForeignKey(TicketSystem_Status)
ticketid = models.ForeignKey(TicketSystem)
message = models.TextField(_('Message'), null=False, blank=False)
created_date = models.DateTimeField(_('Sent'), default=datetime.utcnow().replace(tzinfo=utc))
目前我得到没有消息的门票:
sql_TicketSystem = TicketSystem.objects.filter(id=kwargs['pk'])
我想像这样进行 LEFT JOIN
SELECT * FROM TicketSystem LEFT JOIN TicketSystem_Messages ON Ticketsystem.id = TicketSystem_Messages.ticketid
我听说过一些关于“select_related”和“prefetch_related”的东西并尝试过,但它不起作用。
解决方案
在 Django 中,您可以在任一方向遍历模型关系,而不是使用原始 SQL 连接,而不管它们在数据库中是如何表示的。
要查找给定TicketSystem
实例的所有消息:
my_ticket = TicketSystem.objects.get(id=0) # or something
my_ticket_messages = my_ticket.ticketsystem_messages_set.all() # or do other filters here
使用 查找所有消息queryset
:
TicketSystem_Messages.objects.filter(ticketId=my_ticket)
要查找包含多条消息的所有工单:
from django.db import Count
TicketSystem.objects.annotate(message_count=Count('ticketsystem_messagess')).filter(message_count__gt=1)
推荐阅读
- vba - 访问数据库 VB
- reactjs - SyntaxError:意外的令牌,预期的“,”
- godot - 如何在 GDScript 中通过拖动使 KinematicBody2D 沿一个方向移动?
- javascript - 如何使用 javascript 获取实时流媒体视频?
- android - 如何将显示器切换到 HDR 模式
- typescript - 如何将接口定义为类属性?
- javascript - assets 文件夹中的图像是否也部署在 Vue 项目中?
- javascript - 当屏幕焦点在反应导航 v5 中时,如何运行函数并获取数据?反应原生
- java - 如何使用 BITWISE 运算符删除数组中的重复元素?
- excel - 将数字从 1 张复制到多张