2017-02-12 15 views
1

После inspectdb у меня есть такая модельДжанго - фильтрация связанного подмножества (иностранный ключ) - Ошибка

class User(models.Model): 
    id = models.AutoField(primary_key=True) 
    login = models.CharField(max_length=30) 
    ... 
    created_on = models.DateTimeField(blank=True, null=True) 
    updated_on = models.DateTimeField(blank=True, null=True) 
    ... 

    class Meta: 
     managed = False 
     db_table = 'users' 

    def __str__(self) : 
     return(self.lastname + ' ' + self.firstname) 


class Journal(models.Model): 
    id = models.AutoField(primary_key=True) 
    user_id = models.ForeignKey(User, db_column='user_id') 
    notes = models.TextField(blank=True, null=True) 
    created_on = models.DateTimeField() 

    class Meta: 
     managed = False 
     db_table = 'journals' 

В этом случае я пытаюсь получить все журналы, которые созданы указанный пользователя после указанной датой.

user = User.objects.get(id=12) 
myCount = user.journal_set.filter(created_on>myDay).count() 

И здесь я получаю следующее сообщение об ошибке:

Traceback (most recent call last): 
    File "<console>", line 1, in <module> 
NameError: name 'created_on' is not defined 

Может кто-нибудь помочь в этом: как рассчитывать связанные журналы, созданные определенным пользователем в этой модели? Спасибо!

ответ

0

Предполагая myDay является объектом питон даты и времени, вы можете сделать:

myCount = user.journal_set.filter(created_on__gt=myDay).count() 

(обратите внимание на двойное подчеркивание между именем поля и оператором gt)

Для различных вариантов для фильтрации по полям см https://docs.djangoproject.com/en/1.10/topics/db/queries/#retrieving-specific-objects-with-filters. Если вы хотите, чтобы журналы, созданные на myDay, были включены в число, вместо этого вы должны фильтровать с помощью created_on__gte=myDay.

+0

большое спасибо! – AlexRusiano

0

Вы не можете использовать ">", чтобы сравнить даты в Django .filter(). Вместо этого используйте «__gt =».

Таким образом, вместо того, чтобы:

myCount = user.journal_set.filter(created_on>myDay).count() 

попробовать:

myCount = user.journal_set.filter(created_on__gt=myDay).count() 

Связанные документы: https://docs.djangoproject.com/en/1.10/ref/models/querysets/#gt

+0

большое спасибо! – AlexRusiano