gpt4 book ai didi

Django查询集排除值

转载 作者:行者123 更新时间:2023-12-04 22:47:58 25 4
gpt4 key购买 nike

模型.py

class ChatMessage(models.Model):
ip=models.IPAddressField()
message=models.CharField(max_length=200)

class BlockIp(models.Model):
ip=models.IPAddressField()

管理文件
class ChatMessageAdmin(admin.ModelAdmin):
def queryset(self, request):
qs = super(ChatMessageAdmin, self).queryset(request)
#block=BlockIp.objects.all()
return qs.exclude(ip='1.1.1.1')

我已经重写了 ChatMessage 类的 queryset 方法。
我试图返回类似的东西:
SELECT * FROM chatmessage as v1 JOIN blockip as v2 on v1.ip!=v2.ip

因此用户只能看到具有不在 blockip 条目中的 ip 的消息
return qs.exclude(ip=BlockIp.objects.all().ip) 语法不正确:(

有什么建议吗?

最佳答案

Django 提供了一些可以在过滤值时使用的运算符。特别是,您需要 __in 运算符。你可以这样做:

blocked = BlockIp.objects.all().values_list('ip', flat=True)
messages = ChatMessage.objects.exclude(ip__in=blocked)
values_list 将返回给定值(在本例中,只是 ip 字段)作为列表。

关于Django查询集排除值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16026524/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com