Django提供了一些运算符,您可以在筛选值时使用这些运算符。特别是,您需要
models.py
class ChatMessage(models.Model):
ip=models.IPAddressField()
message=models.CharField(max_length=200)
class BlockIp(models.Model):
ip=models.IPAddressField()
管理员.py
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
因此用户只看到具有不在块ip条目中的ip的消息
return qs.exclude(ip=BlockIp.objects.all().ip)
语法不正确:(
有什么建议吗?
__in
运算符。你可以这样做:
blocked = BlockIp.objects.all().values_list('ip', flat=True)
messages = ChatMessage.objects.exclude(ip__in=blocked)
values_list
将以列表形式返回给定值(在本例中,仅返回ip
字段(。