首页 > 解决方案 > 某些 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/

标签: pythondjangopostgresqldjango-admin

解决方案


有几件事我想解决,不适合评论:

  1. 您正在使用list一个模型的视图使用另一个模型的 id 重定向到同一模型的更改视图。根据该片段,这就是列表视图所做的一切。
  2. 该查询集不是发生错误的地方。它也似乎是多余的 - 您正在使用当前用户的EmailUserid 通过 id 获取,然后将返回的对象的 id 传递给另一个视图。你可以通过request.user.id。但是你怎么能确定 idEmailUserCooperationEmployeeobjects 匹配呢?
  3. 该错误似乎发生在您重定向到的视图中,并且您需要检查相关的查询集。

推荐阅读