标签: django-orm

如何在django中使用过滤器

class Status(models.Model):someid = models.IntegerField()value = models.IntegerField()status_msg = models.CharField(max_length = 2000)

so my database look like:
 20     1234567890   'some mdg'
 20     4597434534   'some msg2'
 20     3453945934   'sdfgsdf'
 10     4503485344   'ddfgg'
Run Code Online (Sandbox Code Playgroud)

所以我必须获取包含某些值之间的someid的值.所以说吧

  val1 = '1234567890'
    val2  = '4414544544'
Run Code Online (Sandbox Code Playgroud)

所以我的最终结果应该是包含id = 20的2个条目的列表如何实现这个.

我试过用

list = Status.objects.filter(someid = 20, value < val2, value > val1) 
Run Code Online (Sandbox Code Playgroud)

哪个错了?如何解决这个问题.

谢谢.

django django-models django-orm django-queryset

1
推荐指数
1
解决办法
5183
查看次数

Django可以嵌套查询和排除

我需要一些帮助将这个查询放在Django中.我简化了这里的例子,只是简单地切入了这一点.

MyModel(models.Model):
    created = models.DateTimeField()
    user = models.ForeignKey(User)
    data = models.BooleanField()
Run Code Online (Sandbox Code Playgroud)

我想用英语创建的查询听起来像:

给我昨天创建的数据为False的每条记录,在同一范围内,对于给定用户,数据永远不会显示为True

这是一个示例输入/输出,如果不清楚的话.

表值

ID   Created    User    Data

1    1/1/2010   admin   False
2    1/1/2010   joe     True
3    1/1/2010   admin   False
4    1/1/2010   joe     False
5    1/2/2010   joe     False
Run Code Online (Sandbox Code Playgroud)

输出查询集

1    1/1/2010   admin   False
3    1/1/2010   admin   False
Run Code Online (Sandbox Code Playgroud)

我要做的是排除#4记录.这是因为在给定范围"昨天"中,对于记录#2中的用户,数据显示为True一次,因此将排除记录#4.

从某种意义上说,似乎有2个查询正在进行中.一个用于确定给定范围内的记录,另一个用于排除与"True"记录相交的记录.

如何使用Django ORM进行此查询?

django django-orm django-queryset

1
推荐指数
1
解决办法
7675
查看次数

Django中的智能查询,与用户的ManyToMany关系

我正在开发一个目前有很多ManyToMany关系的应用程序(并且最终会有更多关系),我正在尝试用巧妙的方法(阅读:正确的方法)来准确地查询ORM以获取JOINed数据.

以下是我所拥有的以及我需要做的事情的样本.我为伪代码道歉.

ProjectModel:
    owner = ForeignKey(User) #just one user
    people = ManyToMany(User) #multiple users and theoretically can also contain the owner
Run Code Online (Sandbox Code Playgroud)

现在我查询的是每个用户的列表,这些用户是当前用户拥有的项目中的"人员".

我没有真正的线索如何做到这一点.__contains似乎并不适合这个...所以我认为我的选择基本上只是查询每个项目并自己进行迭代.但如果我知道如何通过ORM/SQL获得它,那将会更加丰富.

谢谢!

python django orm django-orm

1
推荐指数
1
解决办法
464
查看次数

如何在没有使用Django ORM的数百个查询的情况下选择多对一到多个?

我的数据库有以下架构:

class Product(models.Model):
    pass

class Tag(models.Model):
    product = models.ForeignKey(Product)
    attr1 = models.CharField()
    attr2 = models.CharField()
    attr3 = models.CharField()

class AlternatePartNumber(models.Model):
    product = models.ForeignKey(Product)
Run Code Online (Sandbox Code Playgroud)

换句话说,a Product有很多Tags,而a Product有很多AlternatePartNumbers. Tags是一组属性的集合Product.

给定a中的三个属性Tag,我想选择Product匹配的s(可能多于一个),以及AlternatePartNumber每个产品的所有s.

目前我这样做:

# views.py
results = Tag.objects.
    filter(attr1=attr1).
    filter(attr2=attr2).
    filter(attr3=attr3)

# a template
{% for result in results %}
    {% for alternate in result.product.alternatepartnumber_set.all %}
        {{ alternate.property }}
    {% endfor %}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

这可以运行数千个查询,具体取决于匹配的数量.有没有一种优化方法?我试过使用Tag.objects.select_related().filter...,这有些帮助,但它没有帮助.

python django query-optimization django-models django-orm

1
推荐指数
1
解决办法
5228
查看次数

Django Tastypie,ManyToMany保存错误

当我通过tastypie api保存项目时,我遇到了问题.(POST方法)

这是我的api.py代码.

from tastypie.resources import ModelResource, ALL, ALL_WITH_RELATIONS
from tastypie.authorization import DjangoAuthorization
from tastypie.authentication import BasicAuthentication
from tastypie import fields
from apps.clients.models import Client
from django.contrib.auth.models import User

class ClientAPI(ModelResource):
    users = fields.ToManyField('apps.clients.api.ClientUserAPI', 'users',related_name='entry',full=True)


    class Meta:
        queryset = Client.objects.all()
        resource_name="clients"
        authentication = BasicAuthentication()
        authorization = DjangoAuthorization()
        filtering={
            "users":ALL
        }

    def hydrate_m2m(self,bundle):
        if bundle.data.get("users"):
            for user_id in bundle.data["users"]:
                new_user = User.objects.get(id=user_id)
                bundle.obj.users.add(new_user)


class ClientUserAPI(ModelResource):
    class Meta:
        queryset = User.objects.all()
        resource_name = 'users'
        fields = ['username', 'first_name', 'last_name', 'last_login']
        authentication = …
Run Code Online (Sandbox Code Playgroud)

api django many-to-many django-orm tastypie

1
推荐指数
1
解决办法
3649
查看次数

如何在django-nonrel中查询EmbeddedModelField的ListField中的字段?

假设我有这个:

class Parent(models.Model):
    id = models.IntegerField(primary_key=True)
    children = ListField(EmbeddedModelField('Child'))

class Child(models.Model):
    id = models.IntegerField(primary_key=True)
Run Code Online (Sandbox Code Playgroud)

在mongo交互式shell中,使用特定子项查找Parent是如此简单:

db.myapp_parent.find({'children.id': 123})
Run Code Online (Sandbox Code Playgroud)

这是如何在django-nonrel中完成的?

我尝试了一些方法,包括我查找原始查询,但raw_results因为某些原因不是Parent.objects中的方法.

FWIW,这就是我的需求.txt:

git+https://github.com/django-nonrel/django@nonrel-1.3
git+https://github.com/django-nonrel/djangotoolbox@toolbox-1.3
git+https://github.com/django-nonrel/mongodb-engine@mongodb-engine-1.3
Run Code Online (Sandbox Code Playgroud)

django django-orm mongodb pymongo django-nonrel

1
推荐指数
1
解决办法
2041
查看次数

在Django中将两个字段相乘

我有以下查询:

sales_for_date_for_provider.exclude(sales_or_return='R').values_list('royalty_price', 'conversion_to_usd'))
Run Code Online (Sandbox Code Playgroud)

查询中的royalty_price* 是否可以乘以* conversion_to_usd?还是我需要进行列表理解或深入研究原始SQL?

python mysql django django-models django-orm

1
推荐指数
1
解决办法
2144
查看次数

Django保存方法无声地失败

我有一个像这样的模型

class UserAttributes(models.Model):

uuid                = models.CharField(max_length=63, null=True,blank=True)
user                = models.OneToOneField(User)
activation_date     = models.DateTimeField(null=True, blank=True)
mobile_number       = models.CharField(max_length=20, null=True, blank=True)
created_date        = models.DateTimeField(auto_now_add=True)

def __str__(self):
    return '{0} - {1}'.format(self.user.id, self.user.get_full_name())

def save(self, *args, **kwargs):

    if not self.pk:
        self.uuid = uuid.uuid4().hex
        return super(UserAttributes, self).save(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)

我已经覆盖了保存方法.但是,在我的观点中,当我手动执行类似的操作时

attributes.activation_date = timezone.now()
attributes.save()
Run Code Online (Sandbox Code Playgroud)

字段activation_date的值永远不会写入数据库.这是我第一次遇到这样的问题.没有例外.有人可以指出这里可能是什么情况.

python django django-models django-orm

1
推荐指数
1
解决办法
788
查看次数

django-orm:如何更新一对一关系字段值

models.py

class Area(models.Model):
    area_name = models.CharField(max_length=255, null=False, blank=False)
    description = models.TextField(null=False, blank=False)

class AreaPoint(models.Model):
    x_axis = models.FloatField(default=0.0)
    y_axis = models.FloatField(default=0.0)
    area = models.OneToOneField(Area,primary_key=True,on_delete=models.CASCADE)
Run Code Online (Sandbox Code Playgroud)

我尝试了两种方法,但都失败了,请指导我.谢谢

# first method : 
# Area.objects.filter(id=304).update(area_name="today is 1", description="today is 1", areapoint__x_axis=111,areapoint__y_axis=222)
# error : Area has no field named 'areapoint__y_axis'

# second method : 
obj = Area.objects.get(id=304)
print obj.areapoint.x_axis # 277
print obj.areapoint.y_axis # 65
obj.areapoint.x_axis = 100
obj.areapoint.y_axis = 200
print obj.areapoint.x_axis # 100
print obj.areapoint.y_axis # 200
obj.save()
print obj.areapoint.x_axis # 100
print …
Run Code Online (Sandbox Code Playgroud)

python django django-orm

1
推荐指数
1
解决办法
3503
查看次数

Django ORM:通过过滤器查找获取字段的verbose_name

我可以使用查询我的模型MyModel.objects.filter(othermodel__nr='foo')

这很好。

我想获取该字段的verbose_name

例:

class OtherModel(models.Model):
    nr=models.IntegerField(verbose_name='Number')
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,因为我可以访问OtherModel,所以很容易,但是我想使其通用。

如何获取此处在“键”中使用的字段的详细名称?

MyModel.objects.filter(**{key: value})

我搜索解决双下划线的方法。在此示例中,“ othermodel__nr”改为(例如)“ Number”。

更新资料

在上面的示例中,我知道引用的模型是OtherModel。但是我搜索了适用于任何字符串的解决方案。例如这样:

MyModel.objects.filter(**{str_containing_three_double_underscores: 'foo'})
Run Code Online (Sandbox Code Playgroud)

我搜寻:

get_verbose_name(str_containing_three_double_underscores) --> MyVerboseName
Run Code Online (Sandbox Code Playgroud)

django django-orm

1
推荐指数
1
解决办法
639
查看次数