I want to check whether the current user already has the same movie id in his personal list or not. If he has it then I want to exclude that movie from my trending list.
I want it to be something like this.
views.py
trending = list(Movies.objects.exclude(mid in mymovies WHERE uid = request.user.id))
models.py
class Movies(models.Model): mid = models.CharField(max_length=255, primary_key=True) title = models.CharField(max_length=255, null=True, blank=True) rating = models.CharField(max_length=5, null=True, blank=True) type = models.CharField(max_length=255, null=True, blank=True) genre = models.CharField(max_length=255, null=True, blank=True) rdate = models.CharField(max_length=255, null=True, blank=True) language = models.CharField(max_length=255, null=True, blank=True) cover = models.CharField(max_length=255, null=True, blank=True) description = models.TextField(null=True, blank=True) sequal = models.CharField(max_length=255, null=True, blank=True) trailer = models.CharField(max_length=255, null=True, blank=True) year = models.CharField(max_length=5, null=True, blank=True) objects = models.Manager() def __str__(self) -> str: return self.title class MyMovies(models.Model): mid = models.ForeignKey(Movies, on_delete=CASCADE) uid = models.ForeignKey(User, on_delete=CASCADE, null=True, blank=True) watched = models.BooleanField() date = models.DateTimeField(auto_now_add=True) objects = models.Manager()
Advertisement
Answer
You can .exclude(…)
with:
trending = Movies.objects.exclude(mymovies__uid=request.user)
If you specified a related_query_name=…
[Django-doc] or a related_name=…
[Django-doc], then you need to use that to make a JOIN with your Movies
model:
trending = Movies.objects.exclude(related_name_of_fk__uid=request.user)
Note: normally a Django model is given a singular name, so
MyMovie
instead of.MyMovies
Note: Normally one does not add a suffix
_id
to aForeignKey
field, since Django will automatically add a “twin” field with an_id
suffix. Therefore it should beuser
, instead of.uid