Search code examples
djangodjango-model-field

How to filter by field name in model manager (NameError)


models.py

class StudentProfile(models.Model):
    student = models.OneToOneField(
    User, related_name='student', primary_key=True, parent_link=True, on_delete=models.CASCADE)
    membership_end = models.DateTimeField(
    verbose_name="Membership End Date", default=now, editable=False)

    objects = StudentProfileManager()

managers.py

class StudentQuerySet(models.QuerySet):
    def get_student_chat_list(self):
        return self.filter(membership_end >= datetime.Now()).values_list('student_id', 'chat_user_sid')

class StudentProfileManager(models.Manager):
    def get_queryset(self):
        return StudentQuerySet(self.model, using=self._db)

    def get_student_chat_list(self):
        return self.get_queryset().get_student_chat_list()

This should have a very simple explanation, but I don't understand what's wrong here. I'm getting the following error:

NameError: name 'membership_end' is not defined

Solution

  • Try:

    return self.filter(membership_end__gte=datetime.Now()).values_list('student_id', 'chat_user_sid')
    

    I don't think you can use >= or <=, so You have to use gte or lte. Everything in your code looks fine. So, I doubt >= is causing that error. Refs