我无法将 ValuesQuerySet 对象序列化为 json 数据,i\xc2\xb4ve 找到了解决此差距的多种解决方案,但这种情况有所不同,因为我需要遵循外键值。
\n\nfrom task_manager.models import UserTasks\ndata=UserTasks.objects.filter(user__username="root",server_id=2).values("server_id__mnemonic")\nRun Code Online (Sandbox Code Playgroud)\n\n前面的查询返回类似这样的内容:
\n\n>>> print data\n[{\'server_id__mnemonic\': u\'lol\'}, {\'server_id__mnemonic\': u\'lol\'}, {\'server_id__mnemonic\': u\'lol\'},.......]\nRun Code Online (Sandbox Code Playgroud)\n\n但是当我尝试将其序列化为 JSON 格式时,会引发下一个异常:
\n\n>>> json_data = serializers.serialize(\'json\',data)\nTraceback (most recent call last):\n File "<console>", line 1, in <module>\n File "C:\\Python27\\lib\\site-packages\\django\\core\\serializers\\__init__.py", line 122, in serialize\n s.serialize(queryset, **options)\n File "C:\\Python27\\lib\\site-packages\\django\\core\\serializers\\base.py", line 45, in serialize\n concrete_model = obj._meta.concrete_model\nAttributeError: \'dict\' object has no attribute \'_meta\'\n>>> type(data)\n<class \'django.db.models.query.ValuesQuerySet\'>\nRun Code Online (Sandbox Code Playgroud)\n\nI\xc2\xb4ve 在 Django 官方手册中找到了一个解决方案:如果您只想序列化字段的子集,则可以为序列化器指定一个 fields 参数:
\n\nfrom django.core import …Run Code Online (Sandbox Code Playgroud) 我有一个查询,由于某种原因,即使我指定了不同的值,也不会返回不同的值,我认为这可能是因为唯一,所以我删除了它,但列表仍然相同
circuit_providers = CircuitInfoData.objects.only('provider').values('provider').distinct()
Run Code Online (Sandbox Code Playgroud)
我只想要一份独特的提供商列表
模型.py
from __future__ import unicode_literals
from django.db import models
import string
import random
import time
import os
# Create your models here.
from service.models import ServiceContacts
def site_photos_path(instance, filename):
file ,extension = os.path.splitext(filename)
# file will be uploaded to MEDIA_ROOT/user_<id>/<filename>
chars=string.ascii_uppercase + string.digits
random_string = ''.join(random.choice(chars) for _ in range(6))
filename = '%s-%s%s' % (random_string,time.strftime("%d-%m-%H-%M-%S"),extension)
return 'site_photos/{0}'.format(filename)
def service_upload_path(instance, filename):
file ,extension = os.path.splitext(filename)
# file will be uploaded to MEDIA_ROOT/user_<id>/<filename>
chars=string.ascii_uppercase + string.digits
random_string …Run Code Online (Sandbox Code Playgroud) 我正在尝试向我的数据库发出查询集请求,我希望从响应中排除整个列,在本例中为列权重。但响应正在返回数据库中的所有列。我正在尝试使用延迟,但它不起作用。
我做错了什么?
视图.py
def product_table(request):
width = request.GET['width']
length = request.GET['length']
prod_filter = Product.objects.filter(length=length,width=width).defer('weigth')
data_prod =serializers.serialize('json', prod_filter)
return JsonResponse({'data_prod':data_prod})
Run Code Online (Sandbox Code Playgroud)
网页
...
<div>
<table id="id_prod" class="table table-striped table-bordered table-hover"></table>
</div>
<script>
$(document).ready(function(){
...
$.get('{% url "prod_table" %}',function (data_prod) {
var data_json = JSON.parse(data_prod['data_prod']);
var data_array = [];
for(var i = 0; i < data_json.length; i++) {
var arr = $.map(data_json[i]['fields'], function(el) { return el });
data_array.push(arr);
}
$('#id_prod').DataTable({
destroy: true,
data: data_array,
columns: [
{ title: "Name" },
{ title: "width" …Run Code Online (Sandbox Code Playgroud) 我正在尝试为系统创建准确且高效的搜索算法。我安装了 Postgresql 来利用它的三元组相似性查询,这就是我搜索对象的方式:
objects_found = Question.objects.extra(where=["CHAR_LENGTH(answer) > 300"])).filter(question__trigram_similar=message
Run Code Online (Sandbox Code Playgroud)
这速度快得令人难以置信,执行大部分查询只用了不到 0.5 秒的时间。查询集的所有对象objects_found都与查询文本相似,但我需要找出最相似的一个。
我知道在这种情况下有两种非常好的算法,第一个是余弦相似度,第二个是Ratcliff/Obershelp 模式识别(它在 Python 中有内置实现)。
我尝试进行一次迭代,对它们中的每一个进行测试,在大多数情况下,余弦相似度大约快 1.5 倍(正如预期的那样,考虑到向量的测量速度要快得多),但 SequenceMatcher 会给出更准确的结果。所以我还是选择了SequenceMatcher。请注意,这次迭代花了很长时间。
最后,我尝试在代码中实现SequenceMatcher:
objects_found = (Question.objects.extra(where=["CHAR_LENGTH(answer) > 300"])).filter(question__trigram_similar=message).iterator()
zsim = ("", 0)
for i in objects_found:
rsim = _search.ratcliff_obershelp(querytext, i.question)
if zsim[1] < rsim:
zsim = (i.answer, rsim)
if rsim > 0.75: # works in most of the cases
break
response = zsim[0]
Run Code Online (Sandbox Code Playgroud)
数据库中有约 1GB 的约 500 万行,postgresql 需要不到 0.5 秒的时间来选择具有三元相似性的正确行。在大约 500 万行中,只有 10-90 …
我正在实现搜索功能,并可以选择通过匹配多个表和这些表中的多个字段来查找记录。
Customer假设我想通过他/她的名字或姓氏,或者通过存储Order在与 不同模型中的放置 ID 来查找Customer。我已经实现的简单场景是用户仅在搜索字段中输入单个单词,然后我使用 Django使用直接字段引用或类似引用Q来查询模型:Orderrelated_query_name
result = Order.objects.filter(
Q(customer__first_name__icontains=user_input)
|Q(customer__last_name__icontains=user_input)
|Q(order_id__icontains=user_input)
).distinct()
Run Code Online (Sandbox Code Playgroud)
小菜一碟,完全没有问题。
但是,如果用户想要缩小搜索范围并在搜索字段中输入多个单词该怎么办?
示例:用户输入Bruce并通过搜索返回大量记录。
现在他/她想要更具体,并将客户的姓氏添加到搜索中。因此Bruce Wayne,在将其分成我拥有的单独部分之后,搜索Bruce变为 和Wayne。显然,我不想搜索Orders模型,因为order_id它是一个单词实例,并且足以立即找到客户,因此对于这种情况,我完全将其从查询中删除。
现在我试图通过名字和姓氏来匹配客户,我还想处理提供数据的顺序是随机的情况,以正确处理Bruce Wayne和Wayne Bruce,这意味着我仍然有客户的全名,但名字和姓氏的位置名字不固定。
这就是我正在寻找答案的问题:如何构建查询来搜索模型的多个字段,而不知道哪些搜索词属于哪个表。
我猜这个解决方案很简单,并且肯定有一种优雅的方法来创建这样的动态查询,但我想不出一种方法。
我是 Django 的新手。如何将 COALESCE sql 查询集写入 django orm。
query = 'SELECT COALESCE(max(CAST(order_no as UNSIGNED)), 0) as o,id from nanossc_Sales_master'
Run Code Online (Sandbox Code Playgroud)
模型.py
class Sales_master(models.Model):
slno = models.IntegerField(blank=True, null=True)
order_no = models.CharField(max_length=50, blank=True, null=True)
type = models.CharField(max_length=50, blank=True, null=True)
customer_id = models.CharField(max_length=50, blank=True, null=True)
customer_name = models.CharField(max_length=50, blank=True, null=True)
brand_name = models.CharField(max_length=50, blank=True, null=True)
name = models.CharField(max_length=50, blank=True, null=True)
Run Code Online (Sandbox Code Playgroud) 我有我需要得到所有对象,其中使用案例existing_field是开始some string。
some string 动态变化,所以我需要一种聪明的方法来过滤掉对象。
我的想法是像这样创建带注释的查询:
MyModel.objects.annotate(annotated_field='some string').filter(annotated_field__startswith=F('existing_field'))
Run Code Online (Sandbox Code Playgroud)
目前它失败了:
QuerySet.annotate() received non-expression(s): some string
有没有办法用字符串值注释对象?
我想优化 django 应用程序,为此我想知道如何检查我的查询是否正在访问数据库,或者我是否从缓存版本中获取结果/返回值?
例如:
products = Products.objects.filter(product_name__icontains="natural")
if not products.exist():
return Response(...)
total_products = products.count()
first_product = product.first()
Run Code Online (Sandbox Code Playgroud)
我喜欢在 shell 中执行它,并想检查哪一行访问了数据库,哪一行只从缓存版本返回结果,以便我可以在我的视图中编写优化的查询。
我知道 django-toolbar 但我找不到它是否支持这样的东西(某些行命中数据库或结果是否来自缓存版本)。
问候。
python django django-queryset django-debug-toolbar django-rest-framework
我有一个Model有Model.status字段的模型。该status字段可以是值draft,active或cancelled。
是否可以根据对象的状态获取所有对象的计数?我更愿意在一个查询中做到这一点,而不是这样:
Model.objects.filter(status='draft').count()
Model.objects.filter(status='active').count()
Model.objects.filter(status='cancelled').count()
Run Code Online (Sandbox Code Playgroud)
我认为这aggregate会有所帮助。
django postgresql django-orm django-queryset django-aggregation
这两段代码是一样的
class PostDetail(generic.DetailView):
model = models.Post
def get_queryset(self):
queryset = super().get_queryset()
return queryset.filter(.........)
Run Code Online (Sandbox Code Playgroud)
和
class PostDetail(generic.DetailView):
model = models.Post
def get_queryset(self):
return post.filter(.........)
Run Code Online (Sandbox Code Playgroud)
这条线实际上是做queryset = super().get_queryset()什么的,如果没有这条线会发生什么?
django ×10
django-queryset ×10
postgresql ×2
python ×2
django-orm ×1
django-q ×1
django-views ×1
json ×1
sqlite ×1