我觉得这有点棘手,至少对我而言.:)
所以我有4个模特Person,Singer,Bassist和Ninja.
歌手,贝斯手和忍者继承自人.
问题是每个Person都可以是它的任何子类.
例如,一个人可以是歌手和忍者.另一个人可以是贝斯手和忍者.另外一个可以全部三个.
我该如何组织我的模特?
非常感谢帮助!
我的PostrgreSQL数据库中有一个类型为text 的数组字段.有没有办法将其映射到Django模型?
我的代码中有这个模型:
class Conversation(models.Model):
participants = models.ManyToManyField(User, related_name="message_participants")
Run Code Online (Sandbox Code Playgroud)
我需要通过"参与者"多对多字段过滤这个"对话"模型对象.意思是:我有3个用户对象,所以我想检索唯一的"对话"对象,其中有3个用户在其"参与者"字段中.
我试过这样做:
def get_exist_conv_or_none(sender,recipients):
conv = Conversation.objects.filter(participants=sender)
for rec in recipients:
conv = conv.filter(participants=rec)
Run Code Online (Sandbox Code Playgroud)
其中sender是User对象,"recipients"是User对象列表.它不会引发错误,但它给了我错误的对话对象.谢谢.
编辑:最近的一次尝试引导我:
def get_exist_conv_or_none(sender,recipients):
participants=recipients
participants.append(sender)
conv = Conversation.objects.filter(participants__in=participants)
return conv
Run Code Online (Sandbox Code Playgroud)
这基本上有同样的问题.它产生的对象在列表中有一个或多个"参与者".但我正在寻找的是多对多对象的精确匹配.意思是,一个具有确切"用户"的对象是多对多关系.
编辑2:我的最后一次尝试.仍然,不会工作.
def get_exist_conv_or_none(sender,recipients):
recipients.append(sender)
recipients = list(set(recipients))
conv = Conversation.objects.annotate(count=Count('participants')).filter(participants=recipients[0])
for participant in recipients[1:]:
conv.filter(participants=participant)
conv.filter(count=len(recipients))
return conv
Run Code Online (Sandbox Code Playgroud) 我有一个名单,例如:
name_list = ['Alpha', 'bEtA', 'omegA']
Run Code Online (Sandbox Code Playgroud)
目前我有以下查询集:
MyModel.objects.filter(name__in=name_list)
Run Code Online (Sandbox Code Playgroud)
我希望能够以不区分大小写的方式过滤名称.我的第一个想法是使用iexact字段查找但它似乎不起作用in.我如何使用iexact与in现场查找我的查询集?或者是否有另一种方法来执行此查询?
我试图使用migrations.RunSQLDjango迁移来运行一些任意的SQL代码.我想仅针对某些db后端运行此迁移(例如仅针对postgres).
我想使用这样的东西,但我没有看到类中的数据库连接信息Migration.
我正在尝试实现聚合查询,这是我的代码:
TicketGroup.objects.filter(event=event).aggregate(
total_group=Sum(F('total_sold')*F('final_price')))
Run Code Online (Sandbox Code Playgroud)
我在TicketGroup对象中有'total_sold'和'final_price',我想要做的就是求和并乘以值来得到所有TicketGroup的总销售额.
我得到的只是这个错误:
表达式包含混合类型.您必须设置output_field
我做错了什么,因为我把'total_group'称为我的输出字段?
谢谢!
让我们假设有一行代码使用包含很长"查找名称"的Django ORM来执行查询:
QuerySet.filter(myfk__child__onetoone__another__manytomany__relation__monster__relationship__mycustomlookup=':P')
Run Code Online (Sandbox Code Playgroud)
我知道我们可以这样做:
QuerySet.filter(
**{
'myfk__child__onetoone__another'
'__manytomany__relation__monster'
'__relationship__mycustomlookup': ':P'
}
)
Run Code Online (Sandbox Code Playgroud)
但我想知道是否还有另一种,也许更多的pythonic /接受的方式?
最近,由于数据库连接错误,我的Django应用程序经常崩溃:
OperationalError: FATAL: sorry, too many clients already
Run Code Online (Sandbox Code Playgroud)
当我进入app数据库时,我发现确实有近100个打开的连接,都有相同的查询(由Django ORM执行)并且全部处于idle状态.
我一直在手动做SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE state = 'idle';但我很困惑为什么会发生这种情况.任何人都可以对这里发生的事情有所了解吗?
我的Django数据库设置不会偏离默认值(我没有定义CONN_MAX_AGE或任何这种性质).
什么可能导致这个?我没有做任何高级Django查询.这可以通过Django设置或者某些PostgreSQL配置来解决吗?任何建议表示赞赏.
我试图在Djangos model.Manager()类上模拟一个链式调用.现在我想嘲笑values()和filter()方法.
为了测试我创建了一个小测试项目:
pip install django mock mock-django nose django-nosedjango-admin.py startproject mocktestmanage.py startapp mockmedjango_nose和mocktest.mockme以INSTALLED_APPS(settings.py)TEST_RUNNER = 'django_nose.NoseTestSuiteRunner'到settings.py为了确保所有设置都正确,我跑了manage.py test.运行一个测试,Django在您创建应用程序时创建的标准测试.
我做的下一件事是创建一个非常简单的模型.
mockme/models.py
from django.db import models
class MyModel(models.Model):
name = models.CharField(max_length=50)
Run Code Online (Sandbox Code Playgroud)
我做的下一件事是创建一个使用的简单函数MyModel.这是我想要稍后测试的功能.
mockme/functions.py
from models import MyModel
def chained_query():
return MyModel.objects.values('name').filter(name='Frank')
Run Code Online (Sandbox Code Playgroud)
这里没有什么特别的事情发生.该函数正在过滤MyModel对象以查找其中的所有实例name='Frank'.对values()的调用将返回一个ValuesQuerySet只包含所有找到的MyModel实例的name字段的内容.
mockme/tests.py
import mock
from django.test import TestCase
from mocktest.mockme.models import MyModel …Run Code Online (Sandbox Code Playgroud) 这是我正在尝试做的事情:在Django中创建一个PostgreSQL数组(数据库特定类型)的模型,它包含另一个模型的外键.
class Books(models.Model):
authors = ArrayField(
models.ForeignKey('my_app.Authors', default=None, null=True, blank=True),
blank=True,
default=list()
)
Run Code Online (Sandbox Code Playgroud)
当我尝试makemigrations时,Django给了我这个错误:
SystemCheckError:系统检查发现了一些问题:
错误:
my_app.Books.authors:(postgres.E002)数组的基本字段不能是相关字段.
关于如何击败的任何想法?
django postgresql django-models django-orm django-migrations
django ×10
django-orm ×10
postgresql ×3
python ×3
django-nose ×1
inheritance ×1
many-to-many ×1
pep8 ×1
python-mock ×1