小编use*_*013的帖子

Django 1.9 JSONField更新行为

我最近更新到Django 1.9并尝试更新我的一些模型字段以使用内置的JSONField(我正在使用PostgreSQL 9.4.5).当我试图创建和更新我的对象的字段时,我遇到了一些特殊的东西.这是我的模型:

class Activity(models.Model):
    activity_id = models.CharField(max_length=MAX_URL_LENGTH, db_index=True, unique=True)
    my_data = JSONField(default=dict())
Run Code Online (Sandbox Code Playgroud)

这是我正在做的一个例子:

>>> from proj import models
>>> test, created = models.Activity.objects.get_or_create(activity_id="foo")
>>> created
True
>>> test.my_data['id'] = "foo"
>>> test.save()
>>> test
<Activity: {"id": "foo"}>
>>> test2, created2 = models.Activity.objects.get_or_create(activity_id="bar")
>>> created2
True
>>> test2
<Activity: {"id": "foo"}>
>>> test2.activity_id
'bar'
>>> test.activity_id
'foo'
Run Code Online (Sandbox Code Playgroud)

似乎每当我更新任何字段时my_data,我创建的下一个对象都会预先填充my_data来自前一个对象的数据.出现这种情况我是否使用get_or_create或只create.有人可以向我解释发生了什么吗?

python django postgresql json

7
推荐指数
1
解决办法
3603
查看次数

PostgreSQL 的 Django 模型继承错误

我正在从 MySQL 后端切换到 PostgreSQL 后端,并且遇到了一些模型继承问题。以下是模型的示例:

class Parent(models.Model):
   key = models.Charfield(...)
   value = models.Charfield(...)
   content_type = models.ForeignKey(ContentType)
   object_id = models.CharField(max_length=200)
   content_object = generic.GenericForeignKey('content_type', 'object_id')

class Child1(Parent):
   pass 

class Child2(Parent):
   pass
Run Code Online (Sandbox Code Playgroud)

我们有两个这样的子类的原因是,我们正在另一个模型中模拟两个键/值对,并希望将它们分成两个表以便于查找。通用 FK 也用于将其附加到其他模型。这种继承设置在 MySQL 中运行良好,但是当我将其切换到 PostgreSQL 时,在尝试运行我们的测试时出现错误(但 syncdb 运行良好)。就好像 Django 对这种关系没问题,但 PostgreSQL 不喜欢生成的 SQL。当我查看从 syncdb 生成的内容时,我看到:

CREATE TABLE "myapp_parent" (
"id" serial NOT NULL PRIMARY KEY,
"key" varchar(200) NOT NULL,
"value" varchar(200) NOT NULL,
"content_type_id" integer NOT NULL REFERENCES "django_content_type" ("id") DEFERRABLE  INITIALLY DEFERRED,
"object_id" varchar(200) NOT NULL);

CREATE TABLE "myapp_child1" …
Run Code Online (Sandbox Code Playgroud)

django postgresql inheritance model

6
推荐指数
1
解决办法
1759
查看次数

在 Django 中,如何查询所有相关对象的某个字段具有相同的值?

假设我在 Django 中有以下模型:

    class Parent(models.Model):
        pass

    class Child(models.Model):
        parent = models.ForeignKey(Parent, related_name='children', null=True)
        foo = models.CharField(max_length=5, blank=True, null=True)
Run Code Online (Sandbox Code Playgroud)

我将如何查询Parent模型以查找所有Parent记录children的值为“ABC” foo

如果我运行: Parent.objects.filter(children__foo='ABC'),它会返回Parent至少其中一个对象children的值为 'ABC' 的对象foo,这不是我想要的。如有任何帮助,我们将不胜感激,谢谢。

sql django django-models

5
推荐指数
1
解决办法
1052
查看次数

标签 统计

django ×3

postgresql ×2

django-models ×1

inheritance ×1

json ×1

model ×1

python ×1

sql ×1