Администратор Django не может получить доступ к определенным элементам

#python #django #django-models #django-admin

Вопрос:

Я работаю в Django с моделью (проверкой) с внешним ключом.

 client_id           = models.ForeignKey(Client, on_delete=models.CASCADE)
 

Все отлично работает с обычной регистрацией администратора, но когда я использую class ChecksAdminSite , она выходит из строя. Вот клиентская модель:

 class Client (models.Model):
    def __str__(self):
        return self.name   ' '  self.surname
    name            = models.CharField(max_length=120)
    surname         = models.CharField(max_length=120, null=True)
    phone           = models.PositiveIntegerField(null=True)
    mail            = models.EmailField(null=True)
    sport           = models.TextField(blank=True, null=True)
    gender_options=(
        ("F", "femenino"),
        ("M", "masculino"),
        )
    gender          = models.CharField(max_length=120, null=True, choices=gender_options)
    birth           = models.DateField(null=True)

    def get_absolute_url(self):
        return reverse("clientes:cliente", kwargs={"client_id": self.id})
    pass
 

Итак, когда я вхожу в конкретный элемент администратора, он отображает следующую ошибку:

Поле «идентификатор» ожидало номер, но получило <Клиент: Хуан Орхуэла>. (Хуан Орхуэла-это имя и фамилия этого конкретного предмета).

Я просто не могу найти решение или ошибку. Кто-нибудь может мне помочь?

Спасибо!

Редактировать

Добавлена трассировка стека:

 Traceback (most recent call last):
  File "C:Usersorjue.virtualenvsfitness-w55kuZbnlibsite-packagesdjangocorehandlersexception.py", line 47, in inner
    response = get_response(request)
  File "C:Usersorjue.virtualenvsfitness-w55kuZbnlibsite-packagesdjangocorehandlersbase.py", line 204, in _get_response
    response = response.render()
  File "C:Usersorjue.virtualenvsfitness-w55kuZbnlibsite-packagesdjangotemplateresponse.py", line 105, in render
    self.content = self.rendered_content
  File "C:Usersorjue.virtualenvsfitness-w55kuZbnlibsite-packagesdjangotemplateresponse.py", line 83, in rendered_content
    return template.render(context, self._request)
  File "C:Usersorjue.virtualenvsfitness-w55kuZbnlibsite-packagesdjangotemplatebackendsdjango.py", line 61, in render
    return self.template.render(context)
  File "C:Usersorjue.virtualenvsfitness-w55kuZbnlibsite-packagesdjangotemplatebase.py", line 170, in render
    return self._render(context)
  File "C:Usersorjue.virtualenvsfitness-w55kuZbnlibsite-packagesdjangotemplatebase.py", line 162, in _render
    return self.nodelist.render(context)
  File "C:Usersorjue.virtualenvsfitness-w55kuZbnlibsite-packagesdjangotemplatebase.py", line 938, in render
    bit = node.render_annotated(context)
  File "C:Usersorjue.virtualenvsfitness-w55kuZbnlibsite-packagesdjangotemplatebase.py", line 905, in render_annotated
    return self.render(context)
  File "C:Usersorjue.virtualenvsfitness-w55kuZbnlibsite-packagesdjangotemplateloader_tags.py", line 150, in render
    return compiled_parent._render(context)
  File "C:Usersorjue.virtualenvsfitness-w55kuZbnlibsite-packagesdjangotemplatebase.py", line 162, in _render
    return self.nodelist.render(context)
  File "C:Usersorjue.virtualenvsfitness-w55kuZbnlibsite-packagesdjangotemplatebase.py", line 938, in render
    bit = node.render_annotated(context)
  File "C:Usersorjue.virtualenvsfitness-w55kuZbnlibsite-packagesdjangotemplatebase.py", line 905, in render_annotated
    return self.render(context)
  File "C:Usersorjue.virtualenvsfitness-w55kuZbnlibsite-packagesdjangotemplateloader_tags.py", line 150, in render
    return compiled_parent._render(context)
  File "C:Usersorjue.virtualenvsfitness-w55kuZbnlibsite-packagesdjangotemplatebase.py", line 162, in _render
    return self.nodelist.render(context)
  File "C:Usersorjue.virtualenvsfitness-w55kuZbnlibsite-packagesdjangotemplatebase.py", line 938, in render
    bit = node.render_annotated(context)
  File "C:Usersorjue.virtualenvsfitness-w55kuZbnlibsite-packagesdjangotemplatebase.py", line 905, in render_annotated
    return self.render(context)
  File "C:Usersorjue.virtualenvsfitness-w55kuZbnlibsite-packagesdjangotemplateloader_tags.py", line 62, in render
    result = block.nodelist.render(context)
  File "C:Usersorjue.virtualenvsfitness-w55kuZbnlibsite-packagesdjangotemplatebase.py", line 938, in render
    bit = node.render_annotated(context)
  File "C:Usersorjue.virtualenvsfitness-w55kuZbnlibsite-packagesdjangotemplatebase.py", line 905, in render_annotated
    return self.render(context)
  File "C:Usersorjue.virtualenvsfitness-w55kuZbnlibsite-packagesdjangotemplateloader_tags.py", line 62, in render
    result = block.nodelist.render(context)
  File "C:Usersorjue.virtualenvsfitness-w55kuZbnlibsite-packagesdjangotemplatebase.py", line 938, in render
    bit = node.render_annotated(context)
  File "C:Usersorjue.virtualenvsfitness-w55kuZbnlibsite-packagesdjangotemplatebase.py", line 905, in render_annotated
    return self.render(context)
  File "C:Usersorjue.virtualenvsfitness-w55kuZbnlibsite-packagesdjangotemplatedefaulttags.py", line 211, in render
    nodelist.append(node.render_annotated(context))
  File "C:Usersorjue.virtualenvsfitness-w55kuZbnlibsite-packagesdjangotemplatebase.py", line 905, in render_annotated
    return self.render(context)
  File "C:Usersorjue.virtualenvsfitness-w55kuZbnlibsite-packagesdjangotemplateloader_tags.py", line 192, in render
    return template.render(context)
  File "C:Usersorjue.virtualenvsfitness-w55kuZbnlibsite-packagesdjangotemplatebase.py", line 172, in render
    return self._render(context)
  File "C:Usersorjue.virtualenvsfitness-w55kuZbnlibsite-packagesdjangotemplatebase.py", line 162, in _render
    return self.nodelist.render(context)
  File "C:Usersorjue.virtualenvsfitness-w55kuZbnlibsite-packagesdjangotemplatebase.py", line 938, in render
    bit = node.render_annotated(context)
  File "C:Usersorjue.virtualenvsfitness-w55kuZbnlibsite-packagesdjangotemplatebase.py", line 905, in render_annotated
    return self.render(context)
  File "C:Usersorjue.virtualenvsfitness-w55kuZbnlibsite-packagesdjangotemplatedefaulttags.py", line 211, in render
    nodelist.append(node.render_annotated(context))
  File "C:Usersorjue.virtualenvsfitness-w55kuZbnlibsite-packagesdjangotemplatebase.py", line 905, in render_annotated
    return self.render(context)
  File "C:Usersorjue.virtualenvsfitness-w55kuZbnlibsite-packagesdjangotemplatedefaulttags.py", line 211, in render
    nodelist.append(node.render_annotated(context))
  File "C:Usersorjue.virtualenvsfitness-w55kuZbnlibsite-packagesdjangotemplatebase.py", line 905, in render_annotated
    return self.render(context)
  File "C:Usersorjue.virtualenvsfitness-w55kuZbnlibsite-packagesdjangotemplatedefaulttags.py", line 312, in render
    return nodelist.render(context)
  File "C:Usersorjue.virtualenvsfitness-w55kuZbnlibsite-packagesdjangotemplatebase.py", line 938, in render
    bit = node.render_annotated(context)
  File "C:Usersorjue.virtualenvsfitness-w55kuZbnlibsite-packagesdjangotemplatebase.py", line 905, in render_annotated
    return self.render(context)
  File "C:Usersorjue.virtualenvsfitness-w55kuZbnlibsite-packagesdjangotemplatedefaulttags.py", line 312, in render
    return nodelist.render(context)
  File "C:Usersorjue.virtualenvsfitness-w55kuZbnlibsite-packagesdjangotemplatebase.py", line 938, in render
    bit = node.render_annotated(context)
  File "C:Usersorjue.virtualenvsfitness-w55kuZbnlibsite-packagesdjangotemplatebase.py", line 905, in render_annotated
    return self.render(context)
  File "C:Usersorjue.virtualenvsfitness-w55kuZbnlibsite-packagesdjangotemplatebase.py", line 988, in render
    output = self.filter_expression.resolve(context)
  File "C:Usersorjue.virtualenvsfitness-w55kuZbnlibsite-packagesdjangotemplatebase.py", line 671, in resolve
    obj = self.var.resolve(context)
  File "C:Usersorjue.virtualenvsfitness-w55kuZbnlibsite-packagesdjangotemplatebase.py", line 796, in resolve
    value = self._resolve_lookup(context)
  File "C:Usersorjue.virtualenvsfitness-w55kuZbnlibsite-packagesdjangotemplatebase.py", line 858, in _resolve_lookup
    current = current()
  File "C:Usersorjue.virtualenvsfitness-w55kuZbnlibsite-packagesdjangocontribadminhelpers.py", line 196, in contents
    f, attr, value = lookup_field(field, obj, model_admin)
  File "C:Usersorjue.virtualenvsfitness-w55kuZbnlibsite-packagesdjangocontribadminutils.py", line 276, in lookup_field
    attr = getattr(obj, name)
  File "F:devfitnessfitnesschecksmodels.py", line 48, in client_check_age
    client = Client.objects.get(pk=self.client_id)
  File "C:Usersorjue.virtualenvsfitness-w55kuZbnlibsite-packagesdjangodbmodelsmanager.py", line 85, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "C:Usersorjue.virtualenvsfitness-w55kuZbnlibsite-packagesdjangodbmodelsquery.py", line 418, in get
    clone = self._chain() if self.query.combinator else self.filter(*args, **kwargs)
  File "C:Usersorjue.virtualenvsfitness-w55kuZbnlibsite-packagesdjangodbmodelsquery.py", line 942, in filter
    return self._filter_or_exclude(False, *args, **kwargs)
  File "C:Usersorjue.virtualenvsfitness-w55kuZbnlibsite-packagesdjangodbmodelsquery.py", line 962, in _filter_or_exclude
    clone._filter_or_exclude_inplace(negate, *args, **kwargs)
  File "C:Usersorjue.virtualenvsfitness-w55kuZbnlibsite-packagesdjangodbmodelsquery.py", line 969, in _filter_or_exclude_inplace
    self._query.add_q(Q(*args, **kwargs))
  File "C:Usersorjue.virtualenvsfitness-w55kuZbnlibsite-packagesdjangodbmodelssqlquery.py", line 1358, in add_q
    clause, _ = self._add_q(q_object, self.used_aliases)
  File "C:Usersorjue.virtualenvsfitness-w55kuZbnlibsite-packagesdjangodbmodelssqlquery.py", line 1377, in _add_q
    child_clause, needed_inner = self.build_filter(
  File "C:Usersorjue.virtualenvsfitness-w55kuZbnlibsite-packagesdjangodbmodelssqlquery.py", line 1319, in build_filter
    condition = self.build_lookup(lookups, col, value)
  File "C:Usersorjue.virtualenvsfitness-w55kuZbnlibsite-packagesdjangodbmodelssqlquery.py", line 1165, in build_lookup
    lookup = lookup_class(lhs, rhs)
  File "C:Usersorjue.virtualenvsfitness-w55kuZbnlibsite-packagesdjangodbmodelslookups.py", line 24, in __init__
    self.rhs = self.get_prep_lookup()
  File "C:Usersorjue.virtualenvsfitness-w55kuZbnlibsite-packagesdjangodbmodelslookups.py", line 76, in get_prep_lookup
    return self.lhs.output_field.get_prep_value(self.rhs)
  File "C:Usersorjue.virtualenvsfitness-w55kuZbnlibsite-packagesdjangodbmodelsfields__init__.py", line 1776, in get_prep_value
    raise e.__class__(
TypeError: Field 'id' expected a number but got <Client: Juan Orjuela>.
 

Редактировать:
Вызов внешнего ключа и определение client_check_age.

 client_id           = models.ForeignKey(Client, on_delete=models.CASCADE)

@property    
    def client_check_age(self):
        client = Client.objects.get(pk=self.client_id)
        client_check_age = round(((date.today() - client.birth)/timedelta(365)), 2)
        return client_check_age
 

Комментарии:

1. Не могли бы вы вставить всю трассировку стека и код для формы администратора и/или admin.py?

2. @DanielButler извините, я новичок в программировании и python. Трассировка стека отображается в веб-браузере или на терминале?

3. Эй, не беспокойся. Это тот, что в терминале.

4. @DanielButler Это довольно долго: docs.google.com/document/d/…

5. Лучше всего отредактировать вопрос и добавить к нему трассировку стека

Ответ №1:

Как правило, при использовании внешнего ключа в django это означает, что объект будет находиться в атрибуте. Если вы исходите из фона sql foreignkey field , он создает client_id столбец в базе данных за кулисами. Хотя тебе никогда не придется беспокоиться об этом

 client = models.ForeignKey(Client, on_delete=models.CASCADE)

@property    
    def client_check_age(self):
        client = Client.objects.get(pk=self.client.id)
        client_check_age = round(((date.today() - client.birth)/timedelta(365)), 2)
        return client_check_age
 

Как только вы обновите этот код, вам захочется воссоздать миграции, а затем перенести базу данных.