我的模型中有以下内容:
class Genre(models.Model):
name = models.CharField(max_length=100)
def my_latest_song(self):
song = Song.objects.filter(genre_id=self.id, author_id=XXXXXXXXX).order_by('-date')
return song[0];
class Song(models.Model):
name = models.CharField(max_length=100)
genre = models.ForeignKey(Genre, on_delete=models.CASCADE, null=True)
date = models.DateField()
author = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE,
)
因此,使用my_latest_song方法,我希望为每个类型获取当前登录用户的最新歌曲 。注意:我已经确定用户必须登录才能看到这一点,不要担心这个额外的验证。
问题是:如何将当前登录的用户的用户ID传递给此模型方法?列出XXXXXXXXXX的位置我尝试过:
还有很多类似的选择。但我是Django的新手,并且不确定如何正确引用它。什么都没有用。
请注意:问题是我经常(在许多不同的视图中)显示每种类型的最新歌曲。这就是为什么我认为它在模型中有意义。它没有存储在数据库中,只是在模型中检索。如果这不合适,请告诉我。
例如,在很多页面上,我显示了一个流派列表,并为每个流派显示该用户上传的最新歌曲:
Genre | Last Song ---------------------- Pop | Song 1 Rock | Song 33 Classic | Song 32
答案 0 :(得分:1)
您不应该在模型中进行此查询。在需要信息时,最好在views.py
中进行查询。
下面是,如果我理解正确,您需要做什么才能在视图中进行此查询。
def relevant_view(request,genreID_from_url):
# ... #
song = Song.objects.filter(author=request.user).filter(genre=genreID_from_url).order_by('-date')[:1]
# ... #
有几点:
Django文档中的查询页面非常有用且清晰:https://docs.djangoproject.com/en/2.0/topics/db/queries/
答案 1 :(得分:0)
这样的事可能吗?
...
def my_latest_song(self, user_id):
song = Song.objects.filter(genre_id=self.id, author=User.objects.get(pk=user_id)).order_by('date')
return song[0];
...
您将无法在该方法中使用request.user.id或任何其他请求值,因为该模型实际上并未使用请求。这通常是通过表格完成的。