社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Django

求助。如何在模板中的一对多数据中过滤出想要的对象?

Hiro • 10 年前 • 6015 次点击  

Node 有一个外键关系为 members

from_node = models.ForeignKey(Node, related_name='members', null=True, blank=True)

平时在 views.py 中可以这样提取数据

node.members.filter(user_id=user.id)

请问在模板中该怎么 filter 出我想要的对象呢?

平时我在模板中需要全部数据的时候就直接用

{% for n in node.members.all %}

现在我只想要 user 为我指定的那个,请问怎么过滤呢?

谢谢大家了。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/743
 
6015 次点击  
文章 [ 6 ]  |  最新文章 10 年前
Hiro
Reply   •   1 楼
Hiro    10 年前

@greenpointan 十分感谢您的回复!!! 由于我的情况需要两个参数进行过滤,其中一个是当前的用户,就是 user。 我后来在 view 中进行了过滤操作,然后将得到结果存到字典里面传给模板了。

不过在模板中为了获取字典的 value 还是用到了自定义 filter。

greenpointan
Reply   •   2 楼
greenpointan    10 年前

我刚才尝试了一下,刚好对应你这种情况 定义一个自定义过滤器即可,定义过滤器以及过滤器的配置使用请看: https://docs.djangoproject.com/en/dev/howto/custom-template-tags/

我这里给一个简单的关于Topics(话题)对Group(小组)的例子:

from django import template

register = template.Library()

@register.filter(name='filtergroup'
def get_topics_by_group(value, arg):
    topics_list = value.filter(group=arg)
    return topics_list

前台使用:

topics_list|filtergroup:group.id

PS:

这样的方法仅仅对objects没有被切片的时候才能使用,如果你之前使用了切片那么就会无效
在django的项目中尽量不要再views里直接使用Models.objects.all(),这样做对服务器压力较大,好一点的做法是:Models.objects.filter(xxx)[0:x]

greenpointan
Reply   •   3 楼
greenpointan    10 年前

Custom template filters
自定义标签过滤
这应该是一个比较干净的解决办法了

Hiro
Reply   •   4 楼
Hiro    10 年前

@toozoofoo 请问怎么将user传入 model类里定义的函数中呢?

Hiro
Reply   •   5 楼
Hiro    10 年前

@toozoofoo 好吧,谢谢。

toozoofoo
Reply   •   6 楼
toozoofoo    10 年前

可以在Node的model类里定义一个函数实现你希望的功能,然后在模板里调用