python – 在Django中向查询集添加属性
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 在Django中向查询集添加属性,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2157字,纯文字阅读大概需要4分钟。
内容图文
![python – 在Django中向查询集添加属性](/upload/InfoBanner/zyjiaocheng/734/da509ac28ec746029b922bd88cbd829a.jpg)
我正在创建一个消息传递系统,我想要做的部分是基于用户是消息的发送者还是接收者,不同的CSS加载.我试图通过将属性附加到标识这个的每个消息对象来实现此目的.
我有我的信息
#models.py
class Message(models.Model):
def __unicode__(self):
return unicode(self.time_date)
message_from = models.ForeignKey(User, related_name="%(class)s_message_from")
message_to = models.ForeignKey(User, related_name="%(class)s_message_to")
message = models.TextField()
file = models.FileField(blank=True, null=True)
read = models.BooleanField(default=False)
time_date = models.DateTimeField(default=django.utils.timezone.now)
job = models.ForeignKey(Job, blank=True, null=True)
以及我获取消息的观点:
def view_messages(request):
messages = Message.objects.filter(message_to=request.user, job_id=None).distinct('message_from')
messages_from_user_ids = messages.values_list('message_from', flat=True).distinct()
messages_from_user = User.objects.filter(id__in=messages_from_user_ids)
messages = Message.objects.filter(
Q(message_to=request.user) & Q(message_from_id=messages_from_user_ids[0]) & Q(job_id=None) | Q(
message_from_id=messages_from_user_ids[0]) & Q(
message_from_id=request.user) & Q(job_id=None)).order_by('time_date')
messages = Message.objects.annotate(foo='true') # error
return render(request, 'freelancestudent/general/messages.html', {'messages': messages,
'messages_from': messages_from_user})
我在线评论错误中试图实现的是通过在每个消息对象上注释字符串’true’来测试annotations,可以在foo下访问.这给了我错误’str’对象没有属性’resolve_expression’.
我最终想要实现的是,如果我以错误的方式解决这个问题,那就是检查用户是否是发件人.我实现它的想法是做这样的事情:
for message in messages:
if message_from == request.user.id:
messages.annotate(sender=True)
虽然,这不是正确的语法.我也不确定注释是否是正确的功能.有任何想法吗?
解决方法:
如果循环查询集,请不要尝试使用注释,只需在实例上设置属性即可.
for message in messages:
if message_from == request.user.id:
message.sender = True
或者,我认为您可以使用Case注释:
from django.db.models import BooleanField, Case, Value, When
messages = Message.annotate(
sender=Case(
When(message_from=request.user, then=Value(True)),
default=Value(False),
output_field=BooleanField(),
)
)
内容总结
以上是互联网集市为您收集整理的python – 在Django中向查询集添加属性全部内容,希望文章能够帮你解决python – 在Django中向查询集添加属性所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。