标签: django-orm

Django ORM:查看模型在另一个模型中是否没有外键输入

所以,我有这2个型号:

class Site(models.Model):
    ...
    ...
Run Code Online (Sandbox Code Playgroud)

另一个:

class SiteInfo(models.Model):
    ...
    ...
    site = models.ForeignKey(Site)
Run Code Online (Sandbox Code Playgroud)

有没有办法让SiteInfo中没有条目的网站?

django django-orm

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

使用最大列值过滤记录的Django查询

有没有一种简单的方法来根据哪个记录在列中具有最大/最小值来过滤Django查询?我基本上是在问这些 问题,但是在Django的ORM的特定背景下.

例如

假设我有一个模型,用于存储每个人电话号码的历史值.

class Person(models.Model):
    name = models.CharField(max_length=100)
    phone = models.CharField(max_length=100)
    created = models.DateTimeField(auto_now_add=True)
Run Code Online (Sandbox Code Playgroud)

记录:

Person(name='Jim',phone='123-456-9870', created=datetime(2005,1,2,4,2))
Person(name='Jim',phone='329-802-9870', created=datetime(2006,9,2,7,8))
Person(name='Sue',phone='324-345-3450', created=datetime(2008,7,4,6,1))
Run Code Online (Sandbox Code Playgroud)

现在说我想找到每个人最近的电话号码.

在SQL中,我通常必须使用子查询来计算最大值:

SELECT p1.name, p1.phone, p1.created
FROM person_person p1, (
    SELECT name, MAX(created) AS max_created
    FROM person_person
    GROUP BY name
) AS p2
WHERE p1.name = p2.name AND p1.created = p2.max_created
Run Code Online (Sandbox Code Playgroud)

Django中是否有任何可以简化此操作的机制?

我在我的后端使用PostgreSQL,因此任何依赖PostgreSQL特定功能的想法或解决方案都会有所帮助.

python sql django postgresql django-orm

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

何时使用Haystack/ElasticSearch与Django的ORM

所以我在一周前在我们的BETA应用程序中使用ElasticSearch实现了Haystack.我可以注意到的一件事是,通过Haystack和Django的ORM,将一些数据(大量)返回给我们的用户(例如列出应用程序中的所有用户)要快得多.现在,我将发布REST服务(使用TastyPie),以便在接下来的几周内为可能的平板电脑提供服务,因为我希望能够从iPad,Nexus平板电脑等访问这些信息.

我想知道的一件事是,我应该何时查询ORM与Haystack/ElasticSearch?例如,如果平板电脑上的用户请求特定的一组用户,我们是应该让TastyPie查询ORM,还是转到ElasticSearch?

如果我们看看这个答案Django:Haystack或ORM,我们都同意DB可以检索和写入数据.但是,我们可以说,一旦搜索引擎更新,Haystack/ElasticSearch可以更快地检索更快的速度吗?

我有点困惑的是,如果它更快,我们应该查询Haystack吗?!

django django-orm django-haystack elasticsearch

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

获取过去30天内创建的对象,包括过去一天

我正在寻找快速方法来计算过去30天内创建的模型对象,分别为每一天.例如:

27.07.2013 (today) - 3 objects created
26.07.2013 - 0 objects created
25.07.2013 - 2 objects created
...
27.06.2013 - 1 objects created
Run Code Online (Sandbox Code Playgroud)

我将在谷歌图表API中使用此数据.你知道如何有效地获得这些数据吗?

django django-models django-orm

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

使用related_name在django admin中配置多对多字段

我在djando 1.5中定义了以下模型和管理员.这是子网和vlan之间的多对多关系.我在ManyToMany字段中使用related_name选项,以便能够从相关的子网对象中获取vlan的集合.从管理员向vlan添加子网效果很好.但是,当我尝试将horizo​​ntal_filer添加到子网admin以便将van添加到其vlan集时,我收到一条错误消息,指出vlans属性不存在.我在某些视图中使用子网对象,我可以正确访问vlans属性.

我在这做错了什么?我见过类似的帖子,但我无法适应任何提议的解决方案.

谢谢你的帮助

model.py

from django.db import models

class Subnet(models.Model):
    networkAddress = models.CharField(max_length=15)
    size = models.IntegerField()

    def __unicode__(self):
        return "%s/%s" % (self.networkAddress, self.size)

class IpAddress(models.Model):
    ipAddress = models.CharField(max_length=15)
    subnet = models.ForeignKey(Subnet)

    def __unicode__(self):
        return "%s" % (self.ipAddress)

class Vlan(models.Model):
    number = models.IntegerField()
    description = models.CharField(max_length=150)
    subnets = models.ManyToManyField(Subnet, related_name='vlans', blank=True)

    def __unicode__(self):
        return "VLAN %s (%s)" % (self.number, self.description)
Run Code Online (Sandbox Code Playgroud)

admin.py

from network.models import Subnet, IpAddress, Vlan
from django.contrib import admin

class SubnetAdmin(admin.ModelAdmin):
    filter_horizontal = ('vlans',)

admin.site.register(Subnet, SubnetAdmin)
admin.site.register(IpAddress)
admin.site.register(Vlan) …
Run Code Online (Sandbox Code Playgroud)

django django-models django-orm django-admin django-admin-filters

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

django的ORM线程安全吗?

我有一个python程序,它使用django的ORM进行数据库访问.该程序具有各种线程,每个线程都可能通过读取或写入来访问数据库.请注意,此程序不是Web服务器.

django的ORM线程安全吗?
它可以在同一个解释器中从不同的线程并行使用吗?
答案取决于交易管理模式吗?django版?还要别的吗?

django multithreading thread-safety django-orm

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

使用Django的m2m_changed来修改pre_add的保存内容

我对Django的信号不是很熟悉,可以使用一些帮助.

如何在保存实例之前修改pk_set?我是否必须向信号呼叫者返回一些东西(比如kwargs)?或者我保存instance自己?

作为一个简单的例子:我希望确保在pk=1保存时我的所有视频都包含类别.我该怎么做m2m_changed

class Video(models.Model):
    category = models.ManyToManyField('Category')

def video_category_changed(sender, **kwargs):
    action = kwargs.pop('action', None)
    pk_set = kwargs.pop('pk_set', None)
    instance = kwargs.pop('instance', None)

    if action == "pre_add":
        if 1 not in pk_set:
            pk_set.update( [ 1 ] )  # adding this to the set
            # do something else?
            # profit?

m2m_changed.connect( video_category_changed, sender=Video.category.through )
Run Code Online (Sandbox Code Playgroud)

python django django-signals django-orm m2m

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

如何在具有自定义.update()的情况下更新实例中的值以更新DRF可写嵌套序列化程序中的多对多关系

我有三个模型玩家,团队和成员,其中玩家和团队使用成员资格作为中间模型具有多对多关系.

class Player(models.Model):
    name = models.CharField(max_length=254)
    rating = models.FloatField(null=True)
    install_ts = models.DateTimeField(auto_now_add=True, blank=True)
    update_ts = models.DateTimeField(auto_now_add=True, blank=True)


class Team(models.Model):
    name = models.CharField(max_length=254)
    rating = models.FloatField(null=True)
    players = models.ManyToManyField(
            Player,
            through='Membership',
            through_fields=('team', 'player'))
    is_active = models.BooleanField(default=True)
    install_ts = models.DateTimeField(auto_now_add=True, blank=True)
    update_ts = models.DateTimeField(auto_now_add=True, blank=True)


class Membership(models.Model):
    team = models.ForeignKey('Team')
    player = models.ForeignKey('Player')
    #date_of_joining = models.DateTimeField()
    install_ts = models.DateTimeField(auto_now_add=True, blank=True)
    update_ts = models.DateTimeField(auto_now_add=True, blank=True)
Run Code Online (Sandbox Code Playgroud)

现在我被要求使用django rest框架更新此成员资格.我尝试通过编写团队序列化程序的自定义来更新使用Writable嵌套序列化程序的那些.update().

@transaction.atomic
def update(self, instance, validated_data):
    '''
    Cutomize the update function for the …
Run Code Online (Sandbox Code Playgroud)

django django-orm django-rest-framework

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

如何在Django Admin中使用raw_id_fields时优化查询数

我有一个数据模型如下:

class Candidate(models.Model):
    name = models.CharField()

class Skill(models.Model):
    name = models.CharField()

class CandidateSkill(models.Model):
    candidate = models.ForeignKey(Candidate)
    skill = models.ForeignKey(Skill, related_name='candidate_skills')
    proficiency = models.CharField()
Run Code Online (Sandbox Code Playgroud)

在管理员中我有:

class CandidateSkillInline(admin.TabularInline):
    model = CandidateSkill
    fields = ('skill', )
    extra = 0
    raw_id_fields = ('skill',)

class CandidateAdmin(admin.ModelAdmin):
    model = Candidate
    fields = ('name',)
    inlines = [CandidateSkillInline]
Run Code Online (Sandbox Code Playgroud)

每个候选人都可以有很多技能.这里的问题是,在每个内联的更改页面中,将使用一个查询来获取技能(SELECT ••• FROM "skill" WHERE "skill"."id" = <id>).如果我添加字段skillCandidateSkillInlineread_only那么就不会有额外的查询.但是,我希望能够在内联中添加新项目.我试过了:

1)添加自定义formset CandidateSkillInline:

class CandidateSkillInlineFormset(BaseInlineFormSet):
    def __init__(self, *args, **kwargs):
        super(CandidateSkillInlineFormset, self).__init__(*args, **kwargs)
        self.queryset = …
Run Code Online (Sandbox Code Playgroud)

django django-orm django-queryset

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

IntegrityError(Django ORM)中缺少表名

我错过了Django的IntegrityError中的表名:

Traceback (most recent call last):
...
    return self.cursor.execute(sql, params)
  File ".../django/db/utils.py", line 94, in __exit__
    six.reraise(dj_exc_type, dj_exc_value, traceback)
  File ".../django/db/backends/utils.py", line 64, in execute
    return self.cursor.execute(sql, params)
IntegrityError: null value in column "manager_slug" violates not-null constraint
DETAIL:  Failing row contains (17485, null, 2017-10-10 09:32:19, , 306).
Run Code Online (Sandbox Code Playgroud)

有没有办法查看INSERT/UPDATE正在访问哪个表?

我们使用PostgreSQL 9.6.

这是一个通用问题:如何获得更好的错误消息?

这不是关于这个特定专栏的问题.我很快就找到了相关的表格和专栏.但我想改进来自CI系统的错误消息.下次我想立即看到表名.

我知道如果我在软件开发过程中看到此错误,我可以使用调试器轻松地显示缺少的信息.但在我的情况下,这发生在生产中,我只有像上面这样的堆栈跟踪.

python django postgresql django-orm

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