标签: django-select-related

Django查询相关字段计数

我有一个用户创建页面的应用程序.我想运行一个简单的数据库查询,返回有多少用户创建了超过2页.

这基本上就是我想要做的,但当然这不是正确的方法:

User.objects.select_related('page__gte=2').count()
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

django django-queryset django-select-related

58
推荐指数
2
解决办法
2万
查看次数

Django中的左外部反向select_related?

想象一下以下模型:

class Parent(Model):
    ...

class Child(Model)
    father = ForeignKey(Parent)
    ...
Run Code Online (Sandbox Code Playgroud)

有些父母有孩子,有些则没有孩子(他们不是真正意义上的父母,只是虚构的名字).

我想提出以下问题:我想列出所有的父母,如果他们有孩子,也请带孩子.这相当于Child表的左外连接,即:

select * from app_parent left join app_child on child_father_id=parent_id
Run Code Online (Sandbox Code Playgroud)

这样,当我在模板中调用Parent.child_set时,我不会在数据库中访问数十亿次.有没有办法做到这一点?谢谢

django left-join django-queryset django-select-related

28
推荐指数
3
解决办法
9304
查看次数

在Django中使用select_related选择特定字段

我使用外键有两个模型文章和博客相关.我想在提取文章时只选择博客名称.

articles = Articles.objects.all().select_related('blog__name')
Run Code Online (Sandbox Code Playgroud)

生成的查询显示它选择了Blog模型中的所有字段.我尝试使用select()和defer()与select_related,但两个都没有用.

articles = Articles.objects.all().select_related('blog__name').only('blog__name', 'title', 'create_time')
Run Code Online (Sandbox Code Playgroud)

上述查询导致错误:select_related中给出的字段名称无效:选项为:blog

如何生成查询以便仅选择文章字段和博客名称?

django django-queryset django-select-related python-2.7 django-1.8

21
推荐指数
2
解决办法
9576
查看次数

Django:与ManyToManyField一起使用select_related

我有 :

class Award(models.Model) :
    name = models.CharField(max_length=100, db_index=True)

class Alias(models.Model) :
    awards = models.ManyToManyField('Award', through='Achiever')

class Achiever(models.Model):
    award = models.ForeignKey(Award)
    alias = models.ForeignKey(Alias)
    count = models.IntegerField(default=1)
Run Code Online (Sandbox Code Playgroud)

我怎样才能Alias拥有全部achiever_setawards预先填充的?

>>> db.reset_queries()
>>> Alias.objects.filter(id="450867").select_related("achiever_set__award").get().achiever_set.all()[0].award.name
u'Perma-Peddle'
>>> len(db.connection.queries)
3
>>> db.reset_queries()
>>> Alias.objects.filter(id="450867").select_related("awards").get().awards.all()[0].name
u'Dwarfageddon (10 player)'
>>> len(db.connection.queries)
2
Run Code Online (Sandbox Code Playgroud)

我将需要很多访问别名已经获得的奖项(中间表和奖项本身).我如何批量所有这些?

python django django-models django-select-related

19
推荐指数
1
解决办法
2万
查看次数

在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)
Run Code Online (Sandbox Code Playgroud)

这些模型用于以下视图和序列化程序:

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, obj):
        request = self.context.get('request', None)

        if request.user != obj and Friendship.objects.filter(from_friend = user):
            return True
        else:
            return False
Run Code Online (Sandbox Code Playgroud)

所以基本上,对于GetAllUsers视图返回的每个用户,我想打印出用户是否是请求者的朋友(实际上我应该检查from_和to_friend,但对于问题并不重要)

我看到的是,对于数据库中的N个用户,有1个查询用于获取所有N个用户,然后在序列化程序中查询1xN个查询 get_is_friend_already

有没有办法在休息框架方式中避免这种情况?也许是将select_related …

python django-orm django-queryset django-select-related django-rest-framework

19
推荐指数
2
解决办法
1万
查看次数

django select_related用于多个外键

select_related如何使用具有多个外键的模型?它只是选择第一个吗?

class Model:fkey1,fkey2,fkey3 ......

文档没有说明这一点,至少没有说明方法的位置.

django django-select-related

9
推荐指数
3
解决办法
9440
查看次数

链外键上的Django select_related

我在这里阅读了文档和所有相关问题,但我还没有正确理解select_related在链接/多个外键上的行为。

假设我们有以下模型:

class RecordLabel(models.Model):
   title = models.CharField(...)

class Band(models.Model):
   band_name = models.CharField(...)

class Artist(models.Model):
   record_label = models.ForeignKey(RecordLabel,...)
   belongs_to_band = models.ForeignKey(Band, ...)

class Producer(models.Model):
   customer = models.ForeignKey(Artist, ...)
Run Code Online (Sandbox Code Playgroud)

A.我们将如何在 a 中使用 select_related

Producer.objects.filter(...).select_related(?)
Run Code Online (Sandbox Code Playgroud)

查询以便预加载所有内容?会不会是这样:

Producer.objects.filter(...).select_related(
    'customer__record_label', 'customer__belongs_to_band')
Run Code Online (Sandbox Code Playgroud)

为什么?

B.如果班级有“流派”作为外键,

 class Genre(models.Model):
       genre_name = models.CharField(...)        

 class Band(models.Model):
       band_name = models.CharField(...)
       music_genre = models.ForeignKey(Genres, ...)
Run Code Online (Sandbox Code Playgroud)

然后为了预加载所有内容,我们将执行以下操作:

Producer.objects.filter(...).select_related(
    'customer__record_label__music_genre', 'customer__record_label__band_name',
    'customer__belongs_to_band__music_genre', 'customer__belongs_to_band__music_genre') 
Run Code Online (Sandbox Code Playgroud)

或类似的东西:

Producer.objects.filter(...).select_related(
    'customer__record_label__music_genre', 'customer__record_label__band_name',
    'customer__belongs_to_band', 'customer__belongs_to_band') 
Run Code Online (Sandbox Code Playgroud)

django django-queryset django-select-related

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

DJANGO:如何根据相关模型的属性对对象进行排序?

我有一个User模型和UserProfile模型.在User模型中,我想命令我的查询,使其按last_name的字母顺序排列.然后我想通过User_profiles"title"属性(经理,执行,会计等)来订购它.

楷模:

from django.contrib.auth.models import User

class UserProfile(models.Model):
    user = models.OneToOneField(User)
    title = models.CharField(max_length=20)
Run Code Online (Sandbox Code Playgroud)

视图:

def user_index(request):
    i = User.objects.all().order_by('last_name', 'title')
    return render_to_response('db/user_index.html', {'i': i ,}, context_instance=RequestContext(request))
Run Code Online (Sandbox Code Playgroud)

"标题"不是用户模型的属性,而是与UserProfile模型的用户相关.如何按字母顺序对UserProfile.title进行排序?

sorting django django-select-related

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

在Django中,我可以在`select_related()查询的对象中`defer()`字段吗?

在我的Django应用程序中,我想用select_related()a QuerySet来"跟随"一个ForeignKey字段,但我只需要访问"跟随"模型实例上的一些字段.我可以defer()用"跟随"字段以某种方式使用该方法.

例如,如果我有......

class BarModel(models.Model):
    ...
    blah = models.TextField()

class FooModel(models.Model):
    bar = models.ForeignKey(BarModel)
    ...    
Run Code Online (Sandbox Code Playgroud)

......我正在做我FooModel.objects.all().select_related('bar')怎么能defer()在这个领域blah.

谢谢.

python django django-queryset django-select-related

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

select_related 中给出的非关系字段:“ ”。选项是:(无)

我有来自不同应用程序的两个模型:

class Measure(models.Model):
    date = models.DateTimeField(default="2018-01-23 15:55")
    average = models.FloatField(default=0)

class Sensor(models.Model):
    measure=models.ForeignKey(Measure, on_delete=models.CASCADE)
    value= models.FloatField(default=0)
Run Code Online (Sandbox Code Playgroud)

我正在调用来自传感器的所有数据,如下所示:

new_context = Sensor.objects.select_related('measure__date')
Run Code Online (Sandbox Code Playgroud)

但是,我收到此错误:

django.core.exceptions.FieldError: select_related 中给出的非关系字段:'date'。选项是:(无)

从文档中,我应该使用 select_related 而不是 prefetch_related,并且调用似乎是连贯的。

我错过了什么吗?

python django django-models django-queryset django-select-related

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