python - 某些 ID 为“xx”的模型不存在。也许它被删除了?
问题描述
我无法使用 ID 访问更改页面,但它存在于数据库中,在某个 Django 帐户中,但我可以在管理员帐户上访问它。我检查了所有权限,它们似乎没问题,只是出现了这个错误:
但是当我在下面的管理员上导航这个 URL(相同的 URL)时,它工作得很好:
http://localhost:8000/en/admin/accounts/cooperationemployee/25/change/
所以我想知道是什么导致了这个问题,但Id
数据库中存在。
合作员工模式:
class CooperationEmployee(models.Model):
cooperation_employee_id = models.CharField(
_('Cooperation Employee ID'), max_length=64, blank=True, null=True)
international_prefix = CountryField(
_('International prefix'), null=True, blank=True)
phone_number = models.CharField(_('Telephone Nr'), max_length=20)
branch = models.CharField(
_('Relevant branch'), max_length=50, blank=True,
null=True)
email_user = models.OneToOneField(
EmailUser, on_delete=models.CASCADE,
related_name='cooperation_employee_profile',
verbose_name=_('Email user'))
我的数据库显示了这一点,ID 可用(Postgres):
CooperationEmployee 的管理页面有这个:
def has_change_permission(self, request, obj=None):
"""Permissions to change account settings."""
if request.user.role == ROLE_COOPERATION_EMPLOYEE:
return True
return False
ROLE_COOPERATION_EMPLOYEE角色适用于上述模型。
编辑 :
这是查询集:
user_id = EmailUser.objects.get(
id=request.user.id).cooperation_employee_profile.id
EmailUser的模型:
class EmailUser(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(_('Email'), unique=True)
first_name = models.CharField(_('First Name'), max_length=64)
last_name = models.CharField(_('Last Name'), max_length=64)
role = models.CharField(
_('Role'), max_length=2, choices=ROLE_CHOICES, null=True, blank=True)
所以,完整的路由代码如下:
class CooperationPartnerGenericChangeView(ListAPIView):
def list(self, request, *args, **kwargs):
url = 'adminsite:accounts_cooperationemployee_change'
user_id = EmailUser.objects.get(
id=request.user.id).cooperation_employee_profile.id
return HttpResponseRedirect(
reverse(url, kwargs={'object_id': user_id}) + '?edit=1')
笔记:
这是一个反向网址adminsite:accounts_cooperationemployee_change
。为了http://localhost:8000/en/admin/accounts/cooperationemployee/25/change/
解决方案
有几件事我想解决,不适合评论:
- 您正在使用
list
一个模型的视图使用另一个模型的 id 重定向到同一模型的更改视图。根据该片段,这就是列表视图所做的一切。 - 该查询集不是发生错误的地方。它也似乎是多余的 - 您正在使用当前用户的
EmailUser
id 通过 id 获取,然后将返回的对象的 id 传递给另一个视图。你可以通过request.user.id
。但是你怎么能确定 idEmailUser
和CooperationEmployee
objects 匹配呢? - 该错误似乎发生在您重定向到的视图中,并且您需要检查相关的查询集。
推荐阅读
- php - 具有不同行和列的 JSON 到 HTML 表
- microservices - 如何在微服务架构中实现可变性?
- c# - 在 .resx 中插入 .png 作为位图而不是字节 []
- java - 如何更改 JFrame 的颜色?
- swift - 我无法设置固定条宽核心图条形图
- angular - 角 12 | 未将其添加到模块中的声明而呈现的组件
- npm - 使用 npm 的 Visual Studio Code ubuntu 终端配置
- flutter - Flutter 2 - getter 上的编译错误:getter“加载”的返回类型是“动态”,它不是“布尔”类型的子类型>
- android - 在 MVVM 的适配器中启动意图是一个好习惯吗?
- javascript - ECharts 3D:如何使表面保持在0,而不是最低z值?