- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在创建一个相当简单的网络应用程序,它可以让我对各种项目进行评分(希望用于生成一些机器学习建议)。
我通过使用 Django-ratings 获得了 5 星评级,但是,我在为我的“评级项目”创建新 View 时遇到困难。更具体地说:我在尝试创建“未评级项目” View 和“先前评级项目” View 时陷入困境。
djangoratings 通过创建使用以下模型来管理投票来工作:
class Vote(models.Model):
content_type = models.ForeignKey(ContentType, related_name="votes")
object_id = models.PositiveIntegerField()
key = models.CharField(max_length=32)
score = models.IntegerField()
user = models.ForeignKey(settings.AUTH_USER_MODEL, blank=True, null=True, related_name="votes")
ip_address = models.IPAddressField()
cookie = models.CharField(max_length=32, blank=True, null=True)
date_added = models.DateTimeField(default=now, editable=False)
date_changed = models.DateTimeField(default=now, editable=False)
class ContentType(models.Model):
name = models.CharField(max_length=100)
app_label = models.CharField(max_length=100)
model = models.CharField(_('python model class name'), max_length=100)
objects = ContentTypeManager()
我正在评分的项目(models.py):
class Media(models.Model):
id = models.AutoField(primary_key=True)
url = models.CharField(unique=True, max_length=100)
last_updated = models.DateTimeField(blank=True, null=True)
...
rating = RatingField(range=5, can_change_vote=True, allow_delete=True) # 5 possible rating values, 1-5
class Meta:
verbose_name_plural = "Media"
下面的 View 通过分页并允许我对每个项目进行评分,效果很好:
class MediaListView(LoginRequiredMixin, ListView):
queryset = Media.objects.all()
template_name = 'myMedia/media_list.html'
paginate_by = 10
但是,我正在寻找一种以两种方式过滤这些项目的方法:
我想我需要查询投票表(过滤当前用户)才能这样做。由于除了“媒体”评级外我没有其他任何东西,所以我可以忽略通用评级表的“content_type”方面(它处理不同类型的模型被评级)。
我看到 request.user在与识别当前用户相关的问题中经常提到。但是,我在尝试这样做时收到“NameError:名称‘request’未定义”错误:
#views.py
class MediaListView(LoginRequiredMixin, ListView):
queryset = Media.objects.all()
template_name = 'myMedia/media_list.html'
paginate_by = 10
class MediaListView_VotesByUser(LoginRequiredMixin, ListView):
User = request.user
voted_ids = Vote.objects.filter(user=User).values('object_id', flat=True) # Obtain the IDs for voted items.
queryset = Media.objects.filter(id__in=voted_ids])
paginate_by = 10
class MediaListView_Unrated(LoginRequiredMixin, ListView):
User = request.user
voted_ids = Vote.objects.filter(user=User).values('object_id', flat=True) # Obtain the IDs for voted items.
queryset = Media.objects.exclude(id__in=voted_ids])
paginate_by = 10
# urls.py
urlpatterns = patterns('',
url(
regex=r'^$',
view=views.MediaListView.as_view(),
name='media'),
url(r'^rate/(?P<object_id>\d+)/(?P<score>\d+)/', AddRatingFromModel(), {
'app_label': 'myMedia',
'model': 'media',
'field_name': 'rating',
}),
url(
regex=r'^myVotes',
view=views.MediaListView_VotesByUser.as_view(),
name='UserVotedOn'),
url(
regex=r'^unrated',
view=views.MediaListView_Unrated.as_view(),
name='UnratedMedia')
)
此外,我不太确定我正朝着正确的方向前进。我是否需要为此单独查看或扩展现有 View ?非常感谢有关我如何创建这些 View 的任何帮助或提示。如果重要的话,我正在使用 Django 1.7(使用 MySQL)。
最佳答案
好吧,所以在谷歌搜索我的问题标题时,我实际上 stumbled(!)在回答问题后,请注意我确实用谷歌搜索了很长一段时间!我想是时候再次回顾所有文档了!
Django documentation: As you can see, it’s quite easy to add more logic to the queryset selection; if we wanted, we could use self.request.user to filter using the current user, or other more complex logic.
以下 View 返回我所有的投票:
class MediaListView_VotesByUser(LoginRequiredMixin, ListView):
def get_queryset(self):
voted_ids = Vote.objects.filter(user=self.request.user).values_list('object_id', flat=True)
return Media.objects.filter(id__in=voted_ids)
paginate_by = 10
下面返回未评级的。
class MediaListView_Unrated(LoginRequiredMixin, ListView):
def get_queryset(self):
voted_ids = Vote.objects.filter(user=self.request.user).values_list('object_id', flat=True)
return Media.objects.exclude(id__in=voted_ids)
paginate_by = 10
关于更好地实现此类功能的性能和/或设计技巧仍然会受到赞赏!
关于jquery - 使用当前用户 ID 的 Django 通用 ListView 过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28882837/
出现在 python 2.7.8 中。 3.4.1 不会发生这种情况。 示例: >>> id(id) 140117478913736 >>> id(id) 140117478913736 >>> id
好吧,我对动态创建的控件的 ID 很困惑。 Public Class TestClass Inherits Panel Implements INamingContainer
我收到下面的错误,说有堆栈溢出。发生这种情况是因为带有 IN (id, id, id...id) 的 SQL 语句有大量参数。有没有什么办法解决这一问题?这是在我使用 Eclipse 的本地环境中发生
为什么 CPython(不知道其他 Python 实现)有以下行为? tuple1 = () tuple2 = ()
为什么 CPython(对其他 Python 实现一无所知)有以下行为? tuple1 = () tuple2 = ()
非常简单的问题:当我有一个持久对象时,它通常有一个名为 ID 的属性(对于抽象类)。 那么..命名约定是ID还是Id? 例如。 public int ID { get; set; } 或 public
知道为什么我会收到此错误,我已经尝试了所有命名约定(小写/大写) 我正在使用 Vaadin,这是我的代码片段: public class Usercontainer extends BeanI
为什么 CPython(不知道其他 Python 实现)有以下行为? tuple1 = () tuple2 = ()
我需要改变表的所有主键 UPDATE TODO SET id = id + 1 但我做不到(Demo 来自 Ahmad Al-Mutawa 的回答)描述了原因。主键不能这样改。 我也不能根据这是 sq
我正在尝试列出与用户相关的讨论列表。 想象一下,如果你愿意的话: posts -------------------------------------------------------------
我有一个表,其中包含一些具有自己的 ID 和共享 SKU key 的文章。我尝试使用左连接进行查询,并使用组结果获取从查询返回的所有 id。 我的数据结构是这样的: id - name -
在下表People中: id name 1 James 2 Yun 3 Ethan 如果我想找到最大 ID,我可以运行此查询 select max(id) id from People; 结果是
我正在产品页面上创建评论模块,其中显示垃圾评论选项,并显示 onclick 显示和隐藏弹出窗口。现在它在单个评论中工作正常但是当评论是两个时它同时打开两个因为类是相同的。现在这就是为什么我想要获取父
根据 REST 哲学,PUT操作应该(取自维基百科): PUT http://example.com/resources/142 Update the address member of the co
我想知道如何在使用 PHP 或 JavaScript 进行身份验证后从 Google Analytics 获取 Property Id、View Id 和 Account Id?因为我希望能够将它们存
我想使用所选按钮的 ID 进行删除。但我不知道如何从中获取/获取 id。我尝试了 this.id 但不起作用。 这是我创建按钮的地方: var deleteEmployer= document.cre
我有一个具有以下结构的表“表” ID LinkedWith 12 13 13 12 14 13 15 14 16
请不要在未阅读问题的情况下将问题标记为重复。我确实发布了一个类似的问题,但 STACKOVERFLOW 社区成员要求我单独重新发布修改后的问题,因为考虑到一个小而微妙的修改,解决方案要复杂得多。 假设
在 Android Studio 中,我创建了一个 Person.java 类。我使用Generate 创建了getter 和setter 以及构造函数。 这是我的 Person.java 类: pu
如何在 jQuery 中制作这样的东西: //这是显示的主体 ID //当我悬停 #hover-id 时,我希望 #principal-id 消失并更改 。但是当我将光标放在 #this-id 上时
我是一名优秀的程序员,十分优秀!