Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Related Field got invalid lookup: icontains

Tags:

python

django

I am trying to include a search field inside my home page. It works for some of the module field. My problem is when I use a ForeignKey field (correct me please if I am wrong).

models.py

class Location(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    my_location = models.CharField(max_length=120, choices=LOCATION_CHOICES)
    update_date = models.DateField(auto_now=True, null=True)

    def __str__(self):
        return self.my_location


class UserProfile(models.Model):

    user = models.ForeignKey(User)
    # The additional attributes we wish to include.
    user_base = models.CharField(max_length=120, choices=LOCATION_CHOICES)
    user_position = models.CharField(max_length=120)
    user_phone = models.PositiveIntegerField()

    def __unicode__(self):
        return self.user.username

views.py

def search_by_location(request):
    if 'q' in request.GET and request.GET['q']:
        q = request.GET['q']
        locations = Location.objects.filter(my_location__icontains=q).order_by('-update_date')
    else:
        locations = Location.objects.order_by('-update_date')
context = {'locations': locations}
return render(request, 'index.html', context)

My problem is if I use user inside the filter query instead of my_location I receive the error:

Related Field got invalid lookup: icontains

Please any advice on how to troubleshoot or any documentation I can read.

like image 819
marwan h-sleiman Avatar asked Jan 26 '16 11:01

marwan h-sleiman


1 Answers

You can use icontains lookup on text fields. user is related (integer) field. Instead of user use user__username.

locations = Location.objects.filter(user__username__icontains=q)
like image 84
Tomasz Jakub Rup Avatar answered Oct 21 '22 19:10

Tomasz Jakub Rup