我有一个模特
class Survey(models.Model):
created_by = models.ForeignKey(User)
question = models.CharField(max_length=150)
active = models.NullBooleanField()
def __unicode__(self):
return self.question
Run Code Online (Sandbox Code Playgroud)
现在我想只更新active字段.所以我这样做:
survey = get_object_or_404(Survey, created_by=request.user, pk=question_id)
survey.active = True
survey.save(["active"])
Run Code Online (Sandbox Code Playgroud)
现在我收到一个错误IntegrityError: PRIMARY KEY must be unique.
我是否正确使用此方法进行更新?
我正在读一本关于Django编码风格的书,他们讨论的一件事是db_index=True.自从我开始使用Django以来,我从未使用过这个函数,因为我不确定它是做什么的.
所以我的问题是,何时考虑添加索引?
如何datetime在Django中的数据库中减去或添加100年?
日期在数据库中,我只是想直接更新字段而不检索它来计算然后插入.
我一直在评估django,并想知道以下是否可行.我已经查看了常规的多个数据库文档,所以请不要指出我,因为我的功能并没有提到这个用例.如果我错了我就把它拿回来:)
我想要一个主要数据库,我的应用程序的大部分模型都将驻留在该主数据库中,但是其中一个应用程序需要动态创建数据库,这些数据库将是客户特定的数据库.
数据库路径(我计划使用sqlite)将存储在主数据库中,因此需要更改游标,但模型将保持不变.
我欢迎任何关于如何实现这一目标的想法?
我正在尝试创建一个使用OuterRef的非常简单的子查询(不是为了实际目的,只是为了让它工作),但仍然遇到同样的错误.
文章/ models.py
from django.db import models
class Tag(models.Model):
name = models.CharField(max_length=120)
def __str__(self):
return self.name
class Post(models.Model):
title = models.CharField(max_length=120)
tags = models.ManyToManyField(Tag)
def __str__(self):
return self.title
Run Code Online (Sandbox Code Playgroud)
manage.py shell代码
>>> from django.db.models import OuterRef, Subquery
>>> from posts.models import Tag, Post
>>> tag1 = Tag.objects.create(name='tag1')
>>> post1 = Post.objects.create(title='post1')
>>> post1.tags.add(tag1)
>>> Tag.objects.filter(post=post1.pk)
<QuerySet [<Tag: tag1>]>
>>> tags_list = Tag.objects.filter(post=OuterRef('pk'))
>>> Post.objects.annotate(count=Subquery(tags_list.count()))
Run Code Online (Sandbox Code Playgroud)
最后两行应该为每个Post对象提供标签数量.在这里我一直得到同样的错误:
ValueError: This queryset contains a reference to an outer query and may only be used in …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个保存对象的视图,但是如果引发一些异常,我想撤消该保存.这是我试过的:
class MyView(View):
@transation.atomic
def post(self, request, *args, **kwargs):
try:
some_object = SomeModel(...)
some_object.save()
if something:
raise exception.NotAcceptable()
# When the workflow comes into this condition, I think the previous save should be undome
# Whant am I missing?
except exception.NotAcceptable, e:
# do something
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?即使引发异常some_object仍然在DataBase中.
有没有办法指定模型(或应用程序,甚至)应该只使用一个特定的数据库?
我正在使用一个我不想改变的遗留数据库.我有两个数据库 - 'default'是可以用于管理员等的sqlite数据库,也可以是旧数据库.我使用了inspectdb为遗留数据库(的一部分)创建了一个模型,它有 managed = False.但有没有办法在模型中指定它只适用于特定的数据库?
我看到你可以在一些查询集等中指定using=databasename,但这对像Databrowse这样的东西是不利的(也可能是通用视图?).可能是Databrowse的一个短缺,你不能指定一个数据库,但它似乎是指定它的正确位置是模型...
然后我想也许答案是编写一个只引用我的遗留数据库的自定义模型管理器 - 但是文档没有提到类似的东西.
对于Django世界,我是否只有一个不同的心理模型可以使用多个数据库?
我有兴趣在像Concurrence或gevent这样的异步框架上运行Django.两个框架都带有自己的异步MySQL驱动程序.
问题是Django只正式支持MySQLdb.我需要做些什么才能让Django使用gevent或Concurrence附带的MySQL驱动程序?
我可以遵循某个地方的分步指南吗?这是一项重大任务吗?
谢谢.
我有2个表products并catagories通过外键连接.我需要products.new_cost使用字段更新字段catagories.price_markup如下:
UPDATE products p
INNER JOIN categories c ON p.category_id = c.id
SET p.new_cost = ROUND(p.pleer_cost * (1 + c.price_markup/100), -1)
WHERE p.update = 1
Run Code Online (Sandbox Code Playgroud)
在SQL中它很容易,但是如何使用Django ORM呢?
我的简化尝试不起作用Cannot resolve keyword 'category.price_markup' into field.:
Product.actived.select_related('category').filter(update=1)).update(new_cost=F('pleer_cost') * F('category.price_markup'))
Run Code Online (Sandbox Code Playgroud) 在我的Django项目中,我依赖于第三方应用程序,该应用程序使用已知模式在各种目录中生成SQLite缓存文件.
我想使用Django模型访问这些数据库,但显然我不能使用静态DATABASES设置.
如何在任意路径上动态打开SQLite数据库?
编辑
正如Byron Ruth指出的那样,解决方案是将它django.db.connections与usingQuerySet中的函数结合使用.
django ×10
django-database ×10
python ×3
mysql ×2
asynchronous ×1
atomicity ×1
datetime ×1
django-orm ×1
django-views ×1
gevent ×1
transactions ×1