所以,我有这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的特定背景下.
例如
假设我有一个模型,用于存储每个人电话号码的历史值.
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特定功能的想法或解决方案都会有所帮助.
所以我在一周前在我们的BETA应用程序中使用ElasticSearch实现了Haystack.我可以注意到的一件事是,通过Haystack和Django的ORM,将一些数据(大量)返回给我们的用户(例如列出应用程序中的所有用户)要快得多.现在,我将发布REST服务(使用TastyPie),以便在接下来的几周内为可能的平板电脑提供服务,因为我希望能够从iPad,Nexus平板电脑等访问这些信息.
我想知道的一件事是,我应该何时查询ORM与Haystack/ElasticSearch?例如,如果平板电脑上的用户请求特定的一组用户,我们是应该让TastyPie查询ORM,还是转到ElasticSearch?
如果我们看看这个答案Django:Haystack或ORM,我们都同意DB可以检索和写入数据.但是,我们可以说,一旦搜索引擎更新,Haystack/ElasticSearch可以更快地检索更快的速度吗?
我有点困惑的是,如果它更快,我们不应该查询Haystack吗?!
我正在寻找快速方法来计算过去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中使用此数据.你知道如何有效地获得这些数据吗?
我在djando 1.5中定义了以下模型和管理员.这是子网和vlan之间的多对多关系.我在ManyToMany字段中使用related_name选项,以便能够从相关的子网对象中获取vlan的集合.从管理员向vlan添加子网效果很好.但是,当我尝试将horizontal_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
我有一个python程序,它使用django的ORM进行数据库访问.该程序具有各种线程,每个线程都可能通过读取或写入来访问数据库.请注意,此程序不是Web服务器.
django的ORM线程安全吗?
它可以在同一个解释器中从不同的线程并行使用吗?
答案取决于交易管理模式吗?django版?还要别的吗?
我对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) 我有三个模型玩家,团队和成员,其中玩家和团队使用成员资格作为中间模型具有多对多关系.
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) 我有一个数据模型如下:
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>).如果我添加字段skill中CandidateSkillInline的read_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的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系统的错误消息.下次我想立即看到表名.
我知道如果我在软件开发过程中看到此错误,我可以使用调试器轻松地显示缺少的信息.但在我的情况下,这发生在生产中,我只有像上面这样的堆栈跟踪.