gpt4 book ai didi

mysql - Django admin - 模型对 super 用户可见,对员工用户不可见

转载 作者:可可西里 更新时间:2023-11-01 07:06:52 25 4
gpt4 key购买 nike

我知道 syncdbmakemigrations,但我们只能在生产环境中使用。

我们最近在生产环境中创建了几个表。正如预期的那样,表在管理员中对任何用户都是不可见的。
发布之后,我们在生产 sql 上手动执行了以下 2 个查询(我在本地运行迁移并执行show create table 查询以获取原始 sql)

django_content_type

INSERT INTO django_content_type(name, app_label, model) 
values ('linked_urls',"urls", 'linked_urls');

auth_permission

INSERT INTO auth_permission (name, content_type_id, codename) 
values
('Can add linked_urls Table', (SELECT id FROM django_content_type where model='linked_urls' limit 1) ,'add_linked_urls'),
('Can change linked_urls Table', (SELECT id FROM django_content_type where model='linked_urls' limit 1) ,'change_linked_urls'),
('Can delete linked_urls Table', (SELECT id FROM django_content_type where model='linked_urls' limit 1) ,'delete_linked_urls');

现在这个模型在 super 用户下是可见的,也可以授予员工用户访问权限,但是员工用户看不到它。
是否有需要在其中输入的表项?

或者有没有其他方法可以在没有syncdb迁移的情况下解决这个问题?

最佳答案

We recently had couple of tables created on production.

我可以通过两种方式阅读您在那里写的内容。

第一种方式:你用SQL语句创建表,在Django中没有对应的模型。如果是这种情况,再多的内容类型和权限也会让 Django 突然使用这些表。您需要为表创建模型。也许他们会是unmanaged ,但它们需要存在。

第二种方式:Django中对应的model是有的,你自己手动建表就行了,没有问题。在这种情况下,我要做的是运行以下代码,代码后有解释:

from django.contrib.contenttypes.management import update_contenttypes
from django.apps import apps as configured_apps
from django.contrib.auth.management import create_permissions

for app in configured_apps.get_app_configs():
update_contenttypes(app, interactive=True, verbosity=0)

for app in configured_apps.get_app_configs():
create_permissions(app, verbosity=0)

上面的代码所做的基本上是执行 Django 在运行迁移后 执行的工作。当迁移发生时,Django 只是根据需要创建表,然后当它完成时,它调用 update_contenttypes,它扫描与项目中定义的模型关联的表并添加到 django_content_type 表需要添加的任何内容。然后它调用 create_permissions 来更新 auth_permissions 需要添加的添加/更改/删除权限。我使用上面的代码强制提前创建权限 during a migration .如果我有一个数据迁移,它会很有用,例如,创建需要引用新权限的组。

关于mysql - Django admin - 模型对 super 用户可见,对员工用户不可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45858398/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com