由于我找不到确切的答案,我决定问。 我有以下两种型号:
class Schedule(models.Model):
transport = models.ForeignKey(Transport)
stop = models.ForeignKey(Stop)
from_to_stop = models.ForeignKey(Direction)
time = models.ManyToManyField(TimeTable)
type_day = models.ForeignKey(TypeDay)
created = models.DateTimeField(_('Created at'), auto_now_add = True)
updated = models.DateTimeField(_('Modified at'), auto_now = True)
class TimeTable(models.Model):
time_arrival = models.TimeField()
created = models.DateTimeField(_('Created at'), auto_now_add = True)
updated = models.DateTimeField(_('Modified at'), auto_now = True)
必须在“time
”的“Schedule
”字段中动态添加内容的脚本。这是我的所作所为:
time = self.get_or_create_time(time)
count = Schedule.objects.filter(time__in = [time]).count()
if not count:
schedule.time.add(time)
def get_or_create_time(self, time):
obj, created = TimeTable.objects.get_or_create(time_arrival=time)
return obj
这里我没有得到所需的结果,因为如果某处有这样的连接,它会搜索整个表格。我想看看是否只有当前对象的这种链接'schedule
'是当前对象。我只想让他看看是否与'TimeTable
'有关联。如何在Django中执行此操作?
答案 0 :(得分:1)
首先,将__in
与单个元素一起使用是没有意义的,然后将其包装在列表中。你必须这样做的事实应该给你一个暗示你使用了错误的谓词:只使用默认值(__eq
,但因为它是默认值,你可以完全不用它)。
此外,如果您只想知道某个对象是否存在,请使用.exists()
而不是.count()
,因为如果有多个对象,后者是一个更昂贵的查询。
但基本上你的问题很简单。您希望过滤属于计划的时间:因此,请从该计划开始,而不是整个计划模型。
exists = self.times.filter(time_arrival=time.time_arrival).exists()