Chr*_*s P 4 django django-admin django-queryset
models.py
class ChatMessage(models.Model):
ip=models.IPAddressField()
message=models.CharField(max_length=200)
class BlockIp(models.Model):
ip=models.IPAddressField()
Run Code Online (Sandbox Code Playgroud)
admin.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')
Run Code Online (Sandbox Code Playgroud)
我已经为ChatMessage类重写了queryset方法.我试图返回类似的东西:
SELECT * FROM chatmessage as v1 JOIN blockip as v2 on v1.ip!=v2.ip
Run Code Online (Sandbox Code Playgroud)
所以用户只能看到ip不在blockip条目中的消息
return qs.exclude(ip=BlockIp.objects.all().ip) 语法不正确:(
有什么建议?
mip*_*adi 10
Django提供了一些在过滤值时可以使用的运算符.特别是,您需要__in操作员.你可以这样做:
blocked = BlockIp.objects.all().values_list('ip', flat=True)
messages = ChatMessage.objects.exclude(ip__in=blocked)
Run Code Online (Sandbox Code Playgroud)
values_list将返回给定值(在本例中,只是ip字段)作为列表.
| 归档时间: |
|
| 查看次数: |
7806 次 |
| 最近记录: |