Некоторая модель с ID "xx" не существует. Возможно, она была удалена?
Я не могу получить доступ к странице изменений с ID, хотя она существует в БД, в определенной учетной записи Django, но я могу получить доступ к ней в учетной записи администратора. Я проверил все разрешения и они кажутся в порядке, только вот я получаю эту ошибку :
Но когда я перехожу по этому URL (тот же URL) в админке ниже, он работает очень хорошо:
http://localhost:8000/en/admin/accounts/cooperationpartner/25/change/
Интересно, что вызывает эту проблему, хотя Id
существует в БД.
Модель для CooperationEmployee :
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 предназначена для модели выше.
EDIT :
Это queryset :
user_id = EmailUser.objects.get(id=request.user.id).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).id
return HttpResponseRedirect(
reverse(url, kwargs={'object_id': user_id}) + '?edit=1')
примечание:
Это обратный url adminsite:accounts_cooperationemployee_change
. для http://localhost:8000/en/admin/accounts/cooperationpartner/25/change/
Есть несколько моментов, которые я хотел бы рассмотреть, но которые не помещаются в комментарии:
- Вы используете
list
представление одной модели для перенаправления на представление изменения той же модели, используя id из другой модели. Это все, что делает представление списка, согласно этому фрагменту. - Этот кверисет не является тем местом, где происходит ошибка. Это также кажется избыточным - вы используете id текущего пользователя для получения
EmailUser
по id, а затем передаете id возвращаемого объекта другому представлению. Вы могли бы просто передатьrequest.user.id
. Но как вы можете быть уверены, что идентификаторы объектовEmailUser
иCooperationEmployee
совпадут? Похоже, что ошибка возникает в представлении, на которое вы перенаправляетесь, и там есть соответствующий набор запросов, который нужно проверить.