【发布时间】:2019-03-01 03:40:59
【问题描述】:
我想做一个票务系统。我有主模型(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”的东西并尝试过,但它不起作用。
【问题讨论】:
-
我不是 SQL 专家,所以 join 对我来说没有多大意义。你拿到了
sql_TicketSystem = TicketSystem.objects.filter(id=kwargs['pk'])的票,你想获取与该票号相关的所有TicketSystem_Messages吗? -
问题是一个ticket并不总是有消息,因此如果ticket没有消息就找不到ticket
-
拿到票后
TicketSystem.objects.filter(id=kwargs['pk'])可以查询到所有与之相关的消息。它将返回查询集中或空查询集中的所有相关消息。使用sql_TicketSystem.ticketsystem_messages_set.all() -
'QuerySet' 对象没有属性 'TicketSystem_Messages_set'
-
是
ticketsystem_messages_set不是TicketSystem_Messages_set
标签: django class model relationship prefetch