<p>我正在使用Python(3)、Django(1.11)和DRF开发一个项目,在这个项目中,我必须基于在db模型中保存为<code>JSONFIELD</code>的<code>json</code>对象字段来过滤数据。在</p>
<p>以下是我尝试过的:</p>
<pre class="lang-py prettyprint-override"><code># model.py
from django.db import models
import jsonfield
class MyModel(models.Model):
id = models.CharField(primary_key=True, max_length=255)
type = models.CharField(max_length=255)
props = jsonfield.JSONField()
repo = jsonfield.JSONField()
created_at = models.DateTimeField()
</code></pre>
^{pr2}$
<pre class="lang-py prettyprint-override"><code># JSON object
{
"id":4633249595,
"type":"PushEvent",
"props":{
"id":4276597,
"login":"iholloway",
"avatar_url":"https://avatars.com/4276597"
},
"repo":{
"id":269910,
"name":"iholloway/aperiam-consectetur",
"url":"https://github.com/iholloway/aperiam-consectetur"
},
"created_at":"2016-04-18 00:13:31"
}
</code></pre>
<pre class="lang-py prettyprint-override"><code># views.py
class PropsEvents(generics.RetrieveAPIView):
serializer_class = MyModelSerializer
def get_object(self):
print(self.request.parser_context['kwargs']['id'])
queryset = MyModel.objects.filter(data__props__id=self.request.parser_context['kwargs']['id'])
obj = get_object_or_404(queryset)
return obj
</code></pre>
<blockquote>
<p>It should return the MyModel records by <code>props ID</code> and should be able to
return the JSON array of all the <code>MyModel objects</code> where the <code>props ID</code> by
the GET request at <code>/mymodel/props/<ID></code>. If the requested <code>props</code> does not
exist then HTTP response code should be 404, otherwise, the response
code should be 200. The JSON array should be sorted in ascending order
by MyModel ID.</p>
</blockquote>
<p>当我向该视图发送请求时,它返回一个错误:</p>
<pre class="lang-sh prettyprint-override"><code>> django.core.exceptions.FieldError: Unsupported lookup 'id' for JSONField or join on the field not permitted.
> [18/Feb/2019 10:37:39] "GET /events/actors/2790311/ HTTP/1.1" 500 16210
</code></pre>
<p>那么,如何根据<code>id of props</code>过滤对象呢?在</p>
<p>请帮帮我!
提前谢谢!在</p>