我知道这存在
django-admin.py inspectdb > models.py
Run Code Online (Sandbox Code Playgroud)
但是,是否有一种简单的方法来限制它?没有手动删除我不想要的东西.
我正在连接到一个有超过一百个表的数据库,但我只想要大约4或5的模型.是否有一种简单的方法从几个给定的表生成模型?
它们是相当大的桌子,所以我也不想把它们全部输入.
问题是这样的:
我有一个这样的模型:
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) 我有一个包含三个字段的 Django 模型:product,condition以及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 中的微服务的内容,并了解到在微服务中我们单独保留小型服务,并且它们可以单独运行。如果我对这个概念没有错误,我将如何使用来自一个数据库的用户的 JWT 令牌进行验证以在第二个微服务中使用该令牌??
我有模型用户。有两个管理器,过滤由 is_active 设置的查询的 UserManager 和 AllUserManager。默认管理器设置为 UserManager。
用户有另一个模型的外键,名为 Address,具有related_name='users'。
问题是下一个。当 User is_active 为 False 时,Address 不会在 users 集合中显示非活动用户。
是否有可能以某种方式将 AllUserManager 设置为某些 FK 的默认管理器?我希望能够列出地址中的所有用户,而不管他们的活动如何。
设置.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 中的工作原理。
我正在使用 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 应用程序,但我希望使用 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
我最近将项目更新为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) 我正在尝试部署一个带有数字海洋的项目。我按照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