【问题标题】:Two dependent conditions in exclude DJANGOexclude DJANGO 中的两个依赖条件
【发布时间】:2021-05-02 04:18:55
【问题描述】:

我想检查当前用户的个人列表中是否已经有相同的电影 ID。如果他有,那么我想从我的热门列表中排除那部电影。

我希望它是这样的。

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()   
    

【问题讨论】:

  • 请分享您的模型。
  • 添加的模型有问题

标签: python sql django


【解决方案1】:

您可以.exclude(…) 使用:

trending = Movies.objects.exclude(<b>mymovies__uid=request.user</b>)

如果您指定了 related_query_name=… [Django-doc]related_name=… [Django-doc],那么您需要使用它与您的 Movies 模型进行 JOIN:

trending = Movies.objects.exclude(<b><i>related_name_of_fk</i>__uid=request.user</b>)

注意:通常 Django 模型被赋予一个单数名称,所以MyMovie而不是MyMovies


注意:通常不会在 ForeignKey 字段中添加后缀 _id,因为 Django 将自动添加一个带有_id 后缀的“孪生”字段。因此应该 是user,而不是uid

【讨论】:

  • 了解命名约定,但完全没有得到您的解决方案我想检查电影不应该在 mymovie 中对于当前用户。
  • 更具体地说,我需要排除这个 SQL 查询的结果 -> SELECT mid FROM mymovies WHERE uid = request.user.id
  • @SakshamAgarwal:好吧,以下内容将排除一个Movies 对象,因为那里存在一个引用该电影的MyMovies 记录,以及request.user 作为uid.
  • 哦,我明白了,我会检查一下这是否适合我,并尽快联系。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-18
  • 1970-01-01
  • 2015-04-14
  • 2017-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多