标签: django-database

从Django中的现有数据库生成一些模型

我知道这存在

django-admin.py inspectdb > models.py
Run Code Online (Sandbox Code Playgroud)

但是,是否有一种简单的方法来限制它?没有手动删除我不想要的东西.

我正在连接到一个有超过一百个表的数据库,但我只想要大约4或5的模型.是否有一种简单的方法从几个给定的表生成模型?

它们是相当大的桌子,所以我也不想把它们全部输入.

django django-models django-database

4
推荐指数
1
解决办法
4249
查看次数

有没有更优雅的方法在 Django 模型中添加值敏感的唯一一起约束?

问题是这样的:

我有一个这样的模型:

class UserBook(models.Model):
    user = models.ForeignKey(User)
    book = models.ForeignKey(Book)
    is_active = models.BooleanField(default=False)

    class Meta:
        unique_together = ("user", "book")
Run Code Online (Sandbox Code Playgroud)

显然,这个模型已经对现场用户书籍有了独特的共同约束。数据库中可能会有一些这样的条目:

    ------------------------------
    |user_id  book_id  is_active |
    |      1        1          0 |
    |      1        2          0 |
    |      1        3          1 |
    ------------------------------
Run Code Online (Sandbox Code Playgroud)

我还要添加一个约束,即每个用户最多可以拥有一个is_active字段值为 1(True) 的条目。

目前我通过将模型更改为这样来解决这个问题:

class UserBook(models.Model):
    user = models.ForeignKey(User)
    book = models.ForeignKey(Book)
    is_active = models.BooleanField(default=False)
    key = models.charFeild(max_length=255, unique=True)

    class Meta:
        unique_together = ("user", "book")

    def save(self, *args, **kwargs):
        if self.is_active:
            self.key = "%s_%s" …
Run Code Online (Sandbox Code Playgroud)

python django django-models django-database

4
推荐指数
3
解决办法
1937
查看次数

计算 Django 查询集中相同的字段值

我有一个包含三个字段的 Django 模型:productcondition以及quantity数据,例如:

| Product | Condition | Quantity |
+---------+-----------+----------+
| A       | new       | 2        |
| A       | new       | 3        |
| A       | new       | 4        |
| A       | old       | 1        |
| A       | old       | 2        |
| B       | new       | 2        |
| B       | new       | 3        |
| B       | new       | 1        |
| B       | old       | 4        | …
Run Code Online (Sandbox Code Playgroud)

django django-models django-queryset django-database

4
推荐指数
1
解决办法
1519
查看次数

Django 微服务身份验证

我正在阅读有关 django 中的微服务的内容,并了解到在微服务中我们单独保留小型服务,并且它们可以单独运行。如果我对这个概念没有错误,我将如何使用来自一个数据库的用户的 JWT 令牌进行验证以在第二个微服务中使用该令牌??

django django-database microservices

4
推荐指数
1
解决办法
1754
查看次数

外键上的 Django 不同模型管理器

我有模型用户。有两个管理器,过滤由 is_active 设置的查询的 UserManager 和 AllUserManager。默认管理器设置为 UserManager。

用户有另一个模型的外键,名为 Address,具有related_name='users'。

问题是下一个。当 User is_active 为 False 时,Address 不会在 users 集合中显示非活动用户。

是否有可能以某种方式将 AllUserManager 设置为某些 FK 的默认管理器?我希望能够列出地址中的所有用户,而不管他们的活动如何。

django django-models django-database

3
推荐指数
1
解决办法
2290
查看次数

Django - 引发异常时不会发生回滚

设置.py

DATABASES = {
'default': {
    'ENGINE': 'django.db.backends.mysql',
    'NAME': 'diva',
    'USER': 'root',
    'PASSWORD': 'admin',
    'ATOMIC_REQUESTS':True,
    'HOST': 'localhost',
    'PORT': '3306',
},
Run Code Online (Sandbox Code Playgroud)

}

视图.py

def create_project(self, request):
    try:
        with transaction.atomic():
               code here
    except Exception as e:
        print "Exception--->",str(e)
        response = {"status":"failed",'response': ugettext("projects.services.create_project.failure")}
        stat = status.HTTP_400_BAD_REQUEST
        return Response(response, status=stat)
Run Code Online (Sandbox Code Playgroud)

在我的代码中,如果它引发 ObjectDoesNotExist 异常 回滚没有发生,任何人都可以用示例解释事务在 django 中的工作原理。

python django transactions atomic django-database

3
推荐指数
1
解决办法
1177
查看次数

Django postgress - 不允许多个主键错误

我正在使用 Postgress 数据库的生产系统上运行迁移,当我运行它时,出现以下错误:

django.db.utils.ProgrammingError:不允许表“website_experience”有多个主键

但在我的开发 SQL 数据库上运行良好。这是我正在使用的模型:

class Experience (models.Model):
    title = models.CharField(max_length = 60)
    company = models.CharField(max_length = 60)
    city = models.CharField(max_length = 60)
    start_date = models.DateField(blank=False, default=datetime.now)
    end_date = models.DateField(blank=True, null=True)
    description = models.CharField(max_length = 1000)
    creative_user = ForeignKey(CreativeUserProfile, models.CASCADE)
Run Code Online (Sandbox Code Playgroud)

最初,字段creative_user(这是我的扩展用户模型)是一个主键,但将其更改为外键以表达具有许多工作经验的一个CreativeUser之间的一对多关系。

这是更改foreignkey之前和之后的迁移

class Migration(migrations.Migration):

    dependencies = [
        ('website', '0003_auto_20170510_1436'),
    ]

    operations = [
        migrations.CreateModel(
            name='Experience',
            fields=[
                ('title', models.CharField(max_length=60)),
                ('company', models.CharField(max_length=60)),
                ('city', models.CharField(max_length=60)),
                ('startDate', models.DateField()),
                ('endDate', models.DateField(blank=True, null=True)),
                ('creative_user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, primary_key=True, serialize=False, to='website.CreativeUserProfile')),
            ],
        ),
]
Run Code Online (Sandbox Code Playgroud)

这表达了体验模型的创建,并且creative_user是模型上的主键。然后将其设为外键后,迁移如下所示:

class Migration(migrations.Migration): …
Run Code Online (Sandbox Code Playgroud)

django-models django-database

3
推荐指数
1
解决办法
3188
查看次数

django 具有多个数据库和用户外键

假设我的服务器上有一个 django 应用程序,但我希望使用 django.contrib.auth.models 进行身份验证,其中用户和组模型/数据位于另一个数据库中的另一台服务器上。在 Django 中,我的数据库设置将是这样的:

DATABASES = {
    'default': {},
    'auth_db': {
        'NAME'      : 'my_auth_db',
        'ENGINE'    : 'django.db.backends.mysql',
        'USER'      : 'someuser',
        'PASSWORD'  : 'somepassword',
        'HOST'      : 'some.host.com',
        'PORT'      : '3306',
    },
    'myapp': {
        'NAME': 'myapp_db',
        'ENGINE': 'django.db.backends.mysql',
        'USER': 'localuser',
        'PASSWORD': 'localpass',
    }
}

DATABASE_ROUTERS = ['pathto.dbrouters.AuthRouter', 'pathto.dbrouters.MyAppRouter']
Run Code Online (Sandbox Code Playgroud)

第一个问题:这是否有效,即它是否允许我使用存储在远程数据库“my_auth_db”中的用户登录到我的 Django 应用程序?

假设上述答案是肯定的,如果在我的本地数据库(应用程序“myapp”)中我的模型具有针对用户的外键,会发生什么情况?换句话说,我的模型 SomeModel 是在 myapp 中定义的,并且应该存在于 myapp_db 中,但它在 my_auth_db 中具有指向用户的外键:

class SomeModel(models.model):
    user = models.ForeignKey(User, unique=False, null=False)
    description = models.CharField(max_length=255, null=True)
    dummy = models.CharField(max_length=32, null=True)
    etc.
Run Code Online (Sandbox Code Playgroud)

第二个问题:这可能吗?或者一个数据库表根本不可能拥有另一个数据库中的表的外键?

如果我真的想完成这项工作,我可以将ForeignKey字段“user”替换为IntegerField“user_id”,然后如果我需要somemodel.user,我会改为获取somemodel.user_id并使用models.User.objects.get(pk =somemodel.user_id),路由器知道在哪里查询用户的 …

python django django-models multiple-databases django-database

3
推荐指数
1
解决办法
4560
查看次数

Django频道2,在测试中访问数据库

我最近将项目更新为Django 2和Channel2。现在,我正在尝试重写针对聊天应用程序的测试。

我遇到了依赖于pytest-django的django db标记的测试问题。我尝试使用async_to_sync on在夹具,设置方法,测试函数本身中创建对象WebsocketCommunicator。但是,这些都不起作用。

如果我在灯具中创建用户并正确保存,则会获得一个ID。但是,在我的使用者中,Django在数据库中看不到该用户。并将其视为匿名用户。

我有一个临时令牌,可用于验证websocket.connect上的用户。

@pytest.fixture
def room():
    room = generate_room()
    room.save()
    return room


@pytest.fixture
def room_with_user(room, normal_user):
    room.users.add(normal_user)
    yield room
    room.users.remove(normal_user)

@pytest.fixture
def normal_user():
    user = generate_user()
    user.save()
    return user

@pytest.mark.django_db
class TestConnect:

    @pytest.mark.asyncio
    async def test_get_connected_client(self, path, room_with_user, temp_token):
        assert get_path(room_with_user.id) == path

        communicator = QSWebsocketCommunicator(application, path, query_string=get_query_string(temp_token))
        connected, subprotocol = await communicator.connect()
        assert connected
        await communicator.disconnect()
Run Code Online (Sandbox Code Playgroud)

消费者:

class ChatConsumer(JsonWebsocketConsumer):
    def connect(self):
        # Called on connection. Either call

        self.user = self.scope['user']

        self.room_id = self.scope['url_route']['kwargs']['room_id'] …
Run Code Online (Sandbox Code Playgroud)

django django-database pytest django-channels

3
推荐指数
1
解决办法
910
查看次数

django.db.utils.OperationalError:致命:数据库不存在(postgres /部署到digitalocean)

我正在尝试部署一个带有数字海洋的项目。我按照https://www.digitalocean.com/community/tutorials/how-to-set-up-django-with-postgres-nginx-and-gunicorn-on-ubuntu-16-04上 的说明进行操作重要的是:我跑了:

postgres=# CREATE DATABASE jobzumoDB;
CREATE DATABASE
Run Code Online (Sandbox Code Playgroud)

然后:

postgres=# CREATE USER admin WITH PASSWORD '123';
CREATE ROLE
postgres=# GRANT ALL PRIVILEGES ON DATABASE jobzumoDB  TO admin;
GRANT
Run Code Online (Sandbox Code Playgroud)

在settings.py中设置以下内容:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'jobzumoDB',
        'USER':'admin',
        'PASSWORD':'123',
        'HOST':'localhost',
        'PORT':'',
    }
Run Code Online (Sandbox Code Playgroud)

然后尝试运行:

 ~/jobzumo/manage.py makemigrations
Run Code Online (Sandbox Code Playgroud)

并得到:

 File "/home/justin/jobzumo/env/lib/python3.6/site-packages/psycopg2/__init__.py", line 126, in connect
        conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
    django.db.utils.OperationalError: FATAL:  database "jobzumoDB" does not exist
Run Code Online (Sandbox Code Playgroud)

两件事情:

ALLOWED_HOSTS = ['jobzumo.com', '142.93.184.125']
Run Code Online (Sandbox Code Playgroud)

我还没有将 jobzumo.com 连接到 digital ocean,但 IP 地址是从我的 Droplet …

django postgresql django-database django-deployment digital-ocean

3
推荐指数
1
解决办法
7477
查看次数