小编Sni*_*irD的帖子

如何在多对多字段(完全匹配)中通过其对象过滤django模型?

我的代码中有这个模型:

class Conversation(models.Model):
    participants = models.ManyToManyField(User, related_name="message_participants")
Run Code Online (Sandbox Code Playgroud)

我需要通过"参与者"多对多字段过滤这个"对话"模型对象.意思是:我有3个用户对象,所以我想检索唯一的"对话"对象,其中有3个用户在其"参与者"字段中.

我试过这样做:

def get_exist_conv_or_none(sender,recipients):
    conv = Conversation.objects.filter(participants=sender)
    for rec in recipients:
        conv = conv.filter(participants=rec)
Run Code Online (Sandbox Code Playgroud)

其中sender是User对象,"recipients"是User对象列表.它不会引发错误,但它给了我错误的对话对象.谢谢.

编辑:最近的一次尝试引导我:

def get_exist_conv_or_none(sender,recipients):
    participants=recipients
    participants.append(sender)
    conv = Conversation.objects.filter(participants__in=participants)
    return conv
Run Code Online (Sandbox Code Playgroud)

这基本上有同样的问题.它产生的对象在列表中有一个或多个"参与者".但我正在寻找的是多对多对象的精确匹配.意思是,一个具有确切"用户"的对象是多对多关系.

编辑2:我的最后一次尝试.仍然,不会工作.

def get_exist_conv_or_none(sender,recipients):
    recipients.append(sender)
    recipients = list(set(recipients))
    conv = Conversation.objects.annotate(count=Count('participants')).filter(participants=recipients[0])
    for participant in recipients[1:]:
        conv.filter(participants=participant)
    conv.filter(count=len(recipients))
    return conv
Run Code Online (Sandbox Code Playgroud)

django many-to-many django-models django-orm

14
推荐指数
1
解决办法
7420
查看次数

rails execjs在使用NVM时找不到节点

我正在使用NVM来管理系统上的Node.js版本,自从我安装它以后,我的rails应用就停止工作了.

ExecJS似乎找不到节点运行时,给出错误:

Node.js (V8) runtime is not available on this system (ExecJS::RuntimeUnavailable)
Run Code Online (Sandbox Code Playgroud)

需要采取什么行动才能使NVM与ExecJS发挥良好的作用?

ruby-on-rails node.js execjs nvm

7
推荐指数
1
解决办法
1850
查看次数

C++破坏了我的想法,如何信任自动垃圾收集器?

我主要使用C/C++进行编程,这使我每天处理指针和内存管理.这一天我正在尝试使用其他工具开发,例如Java,Python和Ruby.

问题是我一直在思考C++风格,我编写的代码通常是用几乎所有编程语言编写的C++,而最大的问题是内存管理,我一直在使用Java中的引用编写错误的代码,并且只是像我一样接近可以达到C++风格.

所以我需要2想到这里,一个是信任垃圾收集器,让我们说通过看看基准测试和证明它确实在Java中工作,并知道我应该做什么,以便让我的代码最好的方式.

第二个想法是知道如何编写其他语言代码.我的意思是我知道该怎么做,我只是从来没有像大多数Java或Python程序员那样编写代码,是否有任何C++程序员的书只是为了向我介绍编写约定?(顺便说一句,原谅我的英语错误)

c++ java memory-management

4
推荐指数
2
解决办法
411
查看次数

如何使用自定义django templatetag与django模板if语句?

我制作了一个django模板标签,用于计算我的一个自定义用户的多对多字段长度:

from django import template

register = template.Library()

@register.simple_tag(takes_context=True)
def unread_messages_count(context):
    user = context['request'].user
    return len(user.messages_unread.all())
Run Code Online (Sandbox Code Playgroud)

并且在模板本身内,我想只有当它大于零时才显示给用户,所以我试过:

{% ifnotequal unread_messages_count 0 %}
   some code...
{% endifnotequal %}
Run Code Online (Sandbox Code Playgroud)

但显然它没有用.甚至没有'with'声明:

{% with unread_messages_count as unread_count %}
    {% ifnotequal unread_count 0 %}
        some code...
    {% endifnotequal %}
{% endwith %}
Run Code Online (Sandbox Code Playgroud)

如何检查变量是否大于0,并且只有当变量大于0时,才向用户显示一些代码(包括变量本身中的数字).谢谢.

python django django-templates

3
推荐指数
1
解决办法
2863
查看次数