标签: 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
查看次数

何时使用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的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
查看次数

在Django Admin中使用DateTimeField保存模型实例会失去微秒的分辨率

在Django 1.8中,让我们说我们有这个非常简单的模型:

class Log(models.Model):
    remarks = models.TextField()
    timestamp = models.DateTimeField(default=timezone.now)
Run Code Online (Sandbox Code Playgroud)

当我将模型实例保存到PostgreSQL数据库时,该timestamp字段将具有微秒.我注意到如果我尝试从Django管理员编辑特定的模型实例,该timestamp字段在保存回数据库时将失去微秒分辨率.

大多数应用程序不需要那么高的准确度,但对于需要这样的应用程序,能够消除这种分辨率损失的所有可能原因将是很好的.是否有任何已知的方法/功能来防止这种情况或这是一个错误/限制?

python django django-models django-orm django-admin

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

如何在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
查看次数

DJango 包含在 JSONField 上不起作用

我已经创建了这样的模型:

class Customer(models.Model):
    name = models.CharField(max_length=200)
    data = JSONField()
Run Code Online (Sandbox Code Playgroud)

和数据归档具有以下结构:

Customer.objects.create(name='David', data={
    'key1': 'text1',
    'key2': 'text2',
    },
})
Run Code Online (Sandbox Code Playgroud)

问题是当我想通过 contains 查询时,它不返回任何结果。

Customer.objects.filter(data__key1__contains='t')
Run Code Online (Sandbox Code Playgroud)

生成的 sql 查询结果不能为“类似 json”的结构提供正确的 sql。

python django django-orm

8
推荐指数
2
解决办法
3894
查看次数

Django ORM,如何使用values()并仍然可以使用choicefield?

我正在使用django v1.10.2

我正在尝试创建动态报告,我将字段和条件以及主要的ORM模型信息存储到数据库中.

我生成动态报告的代码是

class_object = class_for_name("app.models", main_model_name)

results = (class_object.objects.filter(**conditions_dict)
                               .values(*display_columns)
                               .order_by(*sort_columns)
                               [:50])
Run Code Online (Sandbox Code Playgroud)

所以main_model_name可以是任何东西.
这除了的,有时相关车型的伟大工程main_model具有choicefield.

所以其中一份报告main_modelPallet.
Pallet有很多PalletMovement.
我的显示器栏目有:serial_number,created_at,pallet_movement__location

前两列是属于Pallet模型的字段.最后一个来自PalletMovement

会发生什么样的PalletMovement模型看起来像这样:

class PalletMovement(models.Model):
    pallet = models.ForeignKey(Pallet, related_name='pallet_movements',
                               verbose_name=_('Pallet'))
    WAREHOUSE_CHOICES = (
        ('AB', 'AB-Delaware'),
        ('CD', 'CD-Delaware'),
    )
    location = models.CharField(choices=WAREHOUSE_CHOICES,
                                max_length=2,
                                default='AB',
                                verbose_name=_('Warehouse Location'))
Run Code Online (Sandbox Code Playgroud)

由于查询集会返回原始值,我如何利用choicefieldin PalletMovement模型来确保pallet_movement__location给出显示的?AB-DelawareCD-Delaware

请记住,main_model根据我在数据库中存储的内容,可以是任何内容. …

python django django-orm django-queryset choicefield

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

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
查看次数