Tag: django queryset

如何做一个小于或等于过滤Django的queryset?

我正试图通过每个用户configuration文件中称为configuration文件的自定义字段来过滤用户。 该字段称为级别,是0-3之间的整数。 如果我使用equals进行筛选,则按照预期得到所选级别的用户列表: user_list = User.objects.filter(userprofile__level = 0) 当我尝试使用小于: user_list = User.objects.filter(userprofile__level < 3) 我得到的错误: 全局名称“userprofile__level”未定义 有没有按<或>过滤,还是我在吠叫错误的树。

在Django中检查空的查询集

检查查询是否返回任何结果的推荐用法是什么? 例: orgs = Organisation.objects.filter(name__iexact = 'Fjuk inc') # If any results # Do this with the results without querying again. # Else, do something else… 我想有几种不同的方法来检查,但我想知道一个有经验的Django用户如何做到这一点。 文档中的大多数示例都忽略了没有发现任何内容的情况。

Djangofilter与获取单个对象?

我正在和一些同事讨论这个问题。 有一个首选的方法来检索Django中的对象,当你只有一个? 两个明显的方法是: try: obj = MyModel.objects.get(id=1) except MyModel.DoesNotExist: # we have no object! do something pass 和 objs = MyModel.objects.filter(id=1) if len(objs) == 1: obj = objs[0] else: # we have no object! do something pass 第一种方法似乎在行为上更正确,但在控制stream中使用exception,这可能会引入一些开销。 第二个是更多的迂回,但永远不会例外。 任何想法哪个更好? 哪个更有效率?

如何在django queryset中执行OR条件?

我想写一个相当于这个SQL查询的Django查询: SELECT * from user where income >= 5000 or income is NULL. 如何构buildDjagno查询集filter? User.objects.filter(income__gte=5000, income=0) 这不起作用,因为它是filter。 我想ORfilter来获得单个查询集的联合。

我怎么做不等于在Django queryset过滤?

在Django模型的QuerySets中,我发现有一个__gt和__lt用于比较值,但是有一个__ne / != / <> ( 不等于 ?) 我想过滤出一个不等于: 例: Model: bool a; int x; 我想要 results = Model.objects.exclude(a=true, x!=5) !=不正确的语法。 我试过__ne , <> 。 我结束了使用: results = Model.objects.exclude(a=true, x__lt=5).exclude(a=true, x__gt=5)

从Django QuerySet获取SQL

我如何获得Django将在QuerySet对象的数据库上使用的SQL? 我试图debugging一些奇怪的行为,但我不知道什么查询将数据库。 谢谢你的帮助。

筛选查询集中的空名称或空名称

我有first_name,last_name&别名(可选),我需要search。 所以,我需要一个查询来给我所有的名称有一个别名集。 只有我能做到: Name.objects.filter(alias!="") 那么,什么是上面的等效?

自定义QuerySet和pipe理器没有打破DRY?

我试图find一种方法来实现一个自定义的QuerySet和一个自定义Manager没有打破DRY。 这是我迄今为止: class MyInquiryManager(models.Manager): def for_user(self, user): return self.get_query_set().filter( Q(assigned_to_user=user) | Q(assigned_to_group__in=user.groups.all()) ) class Inquiry(models.Model): ts = models.DateTimeField(auto_now_add=True) status = models.ForeignKey(InquiryStatus) assigned_to_user = models.ForeignKey(User, blank=True, null=True) assigned_to_group = models.ForeignKey(Group, blank=True, null=True) objects = MyInquiryManager() 这工作正常,直到我做这样的事情: inquiries = Inquiry.objects.filter(status=some_status) my_inquiry_count = inquiries.for_user(request.user).count() 由于QuerySet与Manager没有相同的方法,因此会立即中断一切。 我试过创build一个自定义的QuerySet类,并在MyInquiryManager实现它,但是最终我复制了所有的方法定义。 我也发现这个代码片段可以工作,但是我需要将额外的parameter passing给for_user所以它会中断,因为它很大程度上依赖于重新定义get_query_set 。 有没有办法做到这一点,而无需在QuerySet和Manager子类中重新定义我的所有方法?

在Django REST框架中优化数据库查询

我有以下型号: class User(models.Model): name = models.Charfield() email = models.EmailField() class Friendship(models.Model): from_friend = models.ForeignKey(User) to_friend = models.ForeignKey(User) 那些模型用在下面的视图和序列化器中: class GetAllUsers(generics.ListAPIView): authentication_classes = (SessionAuthentication, TokenAuthentication) permission_classes = (permissions.IsAuthenticated,) serializer_class = GetAllUsersSerializer model = User def get_queryset(self): return User.objects.all() class GetAllUsersSerializer(serializers.ModelSerializer): is_friend_already = serializers.SerializerMethodField('get_is_friend_already') class Meta: model = User fields = ('id', 'name', 'email', 'is_friend_already',) def get_is_friend_already(self, […]

Django聚合:两个域的乘法求和

我有一个这样的模型 class Task(models.Model): progress = models.PositiveIntegerField() estimated_days = models.PositiveIntegerField() 现在我想在数据库级别上进行计算Sum(progress * estimated_days) 。 使用Django聚合我可以有每个领域的总和,但不是领域的乘法的总和。