标签: django-orm

查看Django queryset delete的SQL查询

你如何看待Django生成的SQL DELETE

SELECT查询集上执行操作时,您可以执行以下操作:

>>> qs = Entry.objects.filter(date__gt='2010-06-01')
>>> qs.query.as_sql()
('SELECT ...)
Run Code Online (Sandbox Code Playgroud)

但我不知道如何获取SQL,以便在我这样做时发生qs.delete().

它看起来更复杂,因为Django 在删除对象时" 模拟SQL约束ON DELETE CASCADE的行为 ".

(背景:在删除子类模型对象时,尝试调试由外键约束生成的IntegrityError.)

django django-orm

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

如何在反向外键上选择相关?

可能重复:
Django中的左外部反向select_related?

A BlogPost有很多个Comment.我想得到一份BlogPosts及其所有评论的清单.

因此,我有

BlogPost.objects.filter(my_filter).select_related()
Run Code Online (Sandbox Code Playgroud)

但是ForeignKey是在Comment,而不是BlogPost,所以select_related()不会预取任何评论.有没有办法让这个工作?

我不能反向查询(Comment.objects...),因为随后的其他对象select_related() 获取是行不通的.我需要双向工作.

django django-models django-orm

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

Django Admin内联递归ManyToMany

我有以下模型与自身的多对多关系

class Ticket(models.Model):

    STATUS = (
        (0, "Open"),
        (1, "Closed"),
    )
    status = models.SmallIntegerField(default=0,choices=STATUS)
    title = models.CharField(max_length=100)
    replies = models.ManyToManyField('self')
    description = models.TextField()
Run Code Online (Sandbox Code Playgroud)

我试图使用以下代码将此模型显示为管理员中的内联

class TicketReply(admin.TabularInline):
    model = Ticket.replies.through
Run Code Online (Sandbox Code Playgroud)

但是我一直收到这个错误

<class 'tsn.ticket.models.Ticket_replies'> has more than 1 ForeignKey to <class 'tsn.ticket.models.Ticket'>
Run Code Online (Sandbox Code Playgroud)

所以我这样做错了,还是不支持?

python django django-orm django-admin

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

django - 从多对一关系中获取对象集

请看看这些型号:

class Album(models.Model):
    user = models.ForeignKey(User)
    name = models.CharField(max_length=200)
    pub_date = models.DateTimeField(default=datetime.now)


class Photo(models.Model):
    album = models.ForeignKey(Album, default=3)
    image = models.ImageField(upload_to=get_upload_file_name)
    caption = models.CharField(max_length=200)
    pub_date = models.DateTimeField(default=datetime.now)
Run Code Online (Sandbox Code Playgroud)

如何获取特定相册的照片集??? 以及如何从照片实例本身获取相册

我试过这个:

# To get the set of photos from the user (tika) album:
>>>t = User.objects.get(username='tika')
>>>t_album = Album.objects.get(user=t)
>>>t_album 
<Album: tika_album>
>>>t_album.image_set.all()
AttributeError: 'Album' Object has no attribute 'image_set'
Run Code Online (Sandbox Code Playgroud)

请指导我正确的方向.谢谢.

django django-models django-orm django-views

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

在Django QuerySet中指定限制和偏移量不起作用

我正在使用Django 1.6.5并且有MySQL的通用查询日志,所以我可以看到sql命中MySQL.
我注意到在Django的QuerySet中指定一个更大的限制是行不通的:

>>> from blog.models import Author  
>>> len(Author.objects.filter(pk__gt=0)[0:999])
>>> len(Author.objects.all()[0:999])
Run Code Online (Sandbox Code Playgroud)

MySQL的一般日志显示两个查询都有LIMIT 21.

但是小于21的限制可以起作用,例如len(Author.objects.all()[0:10])可以生成一个sql LIMIT 10.

这是为什么?我需要配置什么吗?

python django django-models django-orm

12
推荐指数
3
解决办法
1万
查看次数

"ptr"在Django ORM列名中代表什么?

使用这些Django ORM模型:

class A(Model):
    pass

class B(A):
    pass
Run Code Online (Sandbox Code Playgroud)

B结果模式中的表包含以下字段:

"a_ptr_id" integer PRIMARY KEY
Run Code Online (Sandbox Code Playgroud)

只是为了更好地理解Django的设计选择 - 有没有任何理由文档提到"ptr"表示什么?

我唯一的猜测是它是"指针"的缩写,但这似乎相当愚蠢,因为基本上任何具有外键约束的字段在概念上都类似于指针.

django-orm

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

Django有条件的创造

Django ORM是否提供了有条件地创建对象的方法?

例如,假设您希望使用某种乐观并发控制来插入新对象.
在某个时刻,您知道要在该表中插入的最新对象,并且您只想在此后没有插入新对象时才创建新对象.

如果是更新,您可以根据修订号进行过滤:

updated = Account.objects.filter(
    id=self.id,
    version=self.version,
).update(
    balance=balance + amount,
    version=self.version + 1,
)
Run Code Online (Sandbox Code Playgroud)

但是,我找不到任何记录的方式来为a create()save()call 提供条件.

我正在寻找在SQL查询级别应用这些条件的东西,以避免"读 - 修改 - 写"问题.

python django django-orm

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

Django QuerySet过滤器方法为一条记录返回多个条目

尝试检索包含满足某些条件的条目的博客(请参阅下面的模型说明):

Blog.objects.filter(entries__title__contains='entry')
Run Code Online (Sandbox Code Playgroud)

结果是:

[<Blog: blog1>, <Blog: blog1>]
Run Code Online (Sandbox Code Playgroud)

由于为了过滤相关模型上的对象而执行了JOIN,因此检索了相同的博客对象两次.仅过滤唯一对象的正确语法是什么?

数据模型:

class Blog(models.Model):
    name = models.CharField(max_length=100)
    def __unicode__(self):
        return self.name

class Entry(models.Model):
    title = models.CharField(max_length=100)
    blog = models.ForeignKey(Blog, related_name='entries')
    def __unicode__(self):
        return self.title
Run Code Online (Sandbox Code Playgroud)

样本数据:

    b1 = Blog.objects.create(name='blog1')
    e1 = Entry.objects.create(title='entry 1', blog=b1)
    e1 = Entry.objects.create(title='entry 2', blog=b1)
Run Code Online (Sandbox Code Playgroud)

django django-models django-orm

11
推荐指数
2
解决办法
2627
查看次数

在具有ManyToMany字段的QuerySet上输出values()

我目前正在将QuerySet的结果放入我的js前端使用的JSON字符串中.

目前使用.values()和simplejson很容易:

simplejson.dumps(list(Task.objects.filter(list=mylist).values()))
Run Code Online (Sandbox Code Playgroud)

我现在在我的Task对象中添加了一个ManyToMany字段,希望将它包含在我的输出中,而不必为ManyToMany关系的每个值重复每个Task对象.

如果我只是做了Task.objects.filter(list=mylist).values('myManyToManyField', 'someOtherField') 输出将为每个值有一个单独的对象/行myManyToManyField

[{'myManyToManyField': 1, 'someOtherField': 'valueOne'}, 
{'myManyToManyField': 2, 'someOtherField': 'valueOne'},
{'myManyToManyField': 1, 'someOtherField': 'valueTwo'}]
Run Code Online (Sandbox Code Playgroud)

有没有办法得到这个结果?:

[{'myManyToManyField': [1,2], 'someOtherField': 'valueOne'},
{'myManyToManyField': 1, 'someOtherField': 'valueTwo'}]
Run Code Online (Sandbox Code Playgroud)

我现在唯一的解决方案是遍历所有Task对象并手动构建输出,根据需要将ManyToMany值放在其中.有一个更好的方法吗?如果不是 - 这会非常低效吗?

django django-orm django-queryset

11
推荐指数
2
解决办法
6521
查看次数

更新对象的选择,每个对象具有不同的批量值(Django)

想象一下,我有一个python字典,其中键是现有用户ID,值是要添加到这些用户现有分数的分数.

例如:( {1: 1580, 4: 540, 2: 678}这可以拉伸到nk,v对)

我需要更新所有这些用户对象的分数(updated_score = original_score + new_score).一种方法是迭代,如下所示:

from django.db.models import F
scores = {1: 1580, 4: 540, 2: 678}
for user_id,score_to_add in scores.iteritems():
    UserProfile.objects.filter(user_id=user_id).update(score=F('score')+score_to_add)
Run Code Online (Sandbox Code Playgroud)

但那是多个数据库调用.我可以一次通话吗?一个说明性的例子会很棒.正如您所猜测的那样,这是一个Django项目.

django django-orm

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