В идеале вы должны кешировать результаты Word.objects.all()
, чтобы система не обращалась к вашей базе данных каждый раз.
Однако я думаю, что ваш цикл можно немного упростить:
Предупреждение: я не проверял это.
Предположим, ваша модель Word:
class Word(models.Model):
the_word = models.CharField(max_length=200)
Сначала вы получаете все помеченные слова, которые принадлежат текущему пользователю:
fw = FlagWord.objects.filter(user = user)
if fw.count():
if fw.word_set.count():
wordlist.append(
dict(('word':obj.the_word,'usertag':True)
for obj in fw.word_set.all())
Наконец, отфильтруйте список слов с другими словами, которые не совпадают.Я расширил код, так как он содержит много скобок.
wordlist.append(dict(
('word':obj.the_word,'usertag':False)
for obj in
Word.objects.exclude(
the_word__in=fw.values_list('word__the_word',flat=True)
)
)
)