Недопустимый литерал Python Django ValueError для int () с основанием 10: 'telba.de_001' - PullRequest
1 голос
/ 08 октября 2019

Я пытался в основном скопировать поведение 3 различных уже функционирующих представлений на основе классов, но получаю эту ошибку, и я не понимаю, почему. Проблемный класс / модель находится в области "exten_int".

Модели:

class context(models.Model):
    """Model representing a context. (for example telba.de)"""
    CONTEXT = models.CharField('Kontext', primary_key=True, unique=True, max_length=200, help_text='')
    COUNTRYPREFIX = models.IntegerField('Ländervorwahl', help_text='')
    CITYPREFIX = models.IntegerField('Ortsvorwahl', help_text='')
    ROOTNUMBER = models.IntegerField('Nummer')
    EXTENSIONSFROM = models.IntegerField('Nebenstellen von')
    EXTENSIONSTILL = models.IntegerField('Nebenstellen bis')
    PORTSCOUNT = models.IntegerField('Anzahl erlaubter Nebenstelen')
    CALLPERMISSIONS_CHOICES = (
        (u'0', u'WorldWide'),
        (u'1', u'Europe'),
        (u'2', u'National'),
        (u'3', u'None'),
    )
    CALLPERMISSIONS = models.CharField('Anrufberechtigungen', max_length=1, choices=CALLPERMISSIONS_CHOICES, help_text='')

    def __str__(self):
        """String for representing the Model object context."""
        return self.CONTEXT

    def get_absolute_url(self):
        """Model representing a context."""
        return reverse('context-detail', args=[str(self.CONTEXT)])


class sipuser(models.Model):
    """Model representing a SIPUser. (for example telba.de_525)"""
    SIPUSER = models.CharField('SIP-Nutzername', primary_key=True, unique=True, max_length=200, help_text='')
    CONTEXT = models.ForeignKey('context', verbose_name='Kontext', max_length=200, on_delete=models.SET_NULL, null=True)
    SIPPASSWD = models.CharField('SIP-Password', max_length=200, help_text='')
    NAME = models.CharField('Name', max_length=200, help_text='')
    NST = models.IntegerField('Nebenstelle', help_text='')
    EXTSIGNALNUMBER = models.IntegerField('Externe Anzeigenummer', help_text='')
    CALLERID = models.CharField('CallerID', max_length=200, help_text='')

    def __str__(self):
        """String for representing the Model object sipuser."""
        return self.SIPUSER

    def get_absolute_url(self):
        """Model representing a SIPUser."""
        return reverse('sipuser-detail', args=[str(self.SIPUSER)])


class exten_ext(models.Model):
    """Model representing external Routing z.b. 4921190096525 => context telba.de nst 525"""
    EXTEN_EXT = models.IntegerField('Eingehende Nummer geht auf', primary_key=True, unique=True, help_text='')
    CONTEXT = models.ForeignKey('context', verbose_name='Kontext', max_length=200, on_delete=models.SET_NULL, null=True, help_text='')
    EXTEN_INT = models.ForeignKey('sipuser', on_delete=models.SET_NULL, null=True, help_text='')
    TRUNKID_CHOICES = (
        (u'1', u'1'),
        (u'9', u'9'),
        (u'11', u'11'),
        (u'12', u'12'),
        (u'13', u'13'),
        (u'14', u'14'),
        (u'15', u'15'),
        (u'16', u'16'),
        (u'18', u'18'),
        (u'19', u'19'),
        (u'20', u'20'),
        (u'21', u'21'),
        (u'22', u'22'),
    )
    TRUNKID = models.CharField('TrunkID', max_length=200, choices=TRUNKID_CHOICES, help_text='')

    def __str__(self):
        """String for representing the Model object for external Routing."""
        return str(self.EXTEN_EXT)

    def get_absolute_url(self):
        """Model representing external Routing z.b. 4921190096525 => context telba.de nst 525"""
        return reverse('exten_ext-detail', args=[str(self.EXTEN_EXT)])


class exten_int(models.Model):
    """Model representing a Function z.b.context telba.de, nst 525 =>  exten_type, exten_attributes (like Voicemail, Fax2Mail ect.)"""
    CONTEXT = models.ForeignKey('context', verbose_name='Kontext', max_length=200, on_delete=models.SET_NULL, null=True)
    EXTEN_INT = models.ForeignKey('sipuser', on_delete=models.SET_NULL, null=True, help_text='')
    EXTEN_TYPE = models.IntegerField('Funktion', default=10, help_text='')
    EXTEN_ATTRIBUTES = models.CharField('Attribute', max_length=200, help_text='', default="call-00")

    def __str__(self):
        """String for representing the Model object Function."""
        return str(self.EXTEN_INT)

    def get_absolute_url(self):
        """Model representing a Function."""
        return reverse('exten_int-detail', args=[str(self.EXTEN_INT)])

Изображение этой модели устарело, но можетдать общее представление о моделях.

enter image description here

для полноты URL-адреса:

urlpatterns = [
    path('', views.index, name='index'),
    path('context/', views.contextListView.as_view(), name='context'),
    path('context/<str:pk>', views.contextDetailView.as_view(), name='context-detail'),

    path('sipuser/', views.sipuserListView.as_view(), name='sipuser'),
    path('sipuser/<str:pk>', views.sipuserDetailView.as_view(), name='sipuser-detail'),

    path('exten_int/', views.exten_intListView.as_view(), name='exten_int'),
    path('exten_int/<str:pk>', views.exten_intDetailView.as_view(), name='exten_int-detail'),

    path('exten_ext/', views.exten_extListView.as_view(), name='exten_ext'),
    path('exten_ext/<str:pk>', views.exten_extDetailView.as_view(), name='exten_ext-detail'),
]

и теперь фактический класс проблемных представлений ТОЛЬКО exten_intDetailView

Просмотры:

class contextListView(generic.ListView):
    model = context
    paginate_by = 10

    class Meta:
        ordering = ['CONTEXT']

    def get_queryset(self):
        queryset = context.objects.all()
        return queryset.order_by('CONTEXT')


class contextDetailView(generic.DetailView):
    model = context
    paginate_by = 10

    class Meta:
        ordering = ['CONTEXT']

    def get_queryset(self):
        queryset = context.objects.all()
        return queryset.order_by('CONTEXT')


class sipuserListView(generic.ListView):
    model = sipuser
    paginate_by = 10

    class Meta:
        ordering = ['CONTEXT', 'SIPUSER']

    def get_queryset(self):
        queryset = sipuser.objects.all()
        return queryset.order_by('CONTEXT', 'SIPUSER')


class sipuserDetailView(generic.DetailView):
    model = sipuser
    paginate_by = 10

    class Meta:
        ordering = ['CONTEXT', 'SIPUSER']

    def get_queryset(self):
        queryset = sipuser.objects.all()
        return queryset.order_by('CONTEXT', 'SIPUSER')


class exten_intListView(generic.ListView):
    model = exten_int
    paginate_by = 10

    class Meta:
        ordering = ['CONTEXT', 'EXTEN_INT']

    def get_queryset(self):
        queryset = exten_int.objects.all()
        return queryset.order_by('CONTEXT', 'EXTEN_INT')


class exten_intDetailView(generic.DetailView):
    model = exten_int
    paginate_by = 10

    class Meta:
        ordering = ['CONTEXT', 'EXTEN_INT']

    def get_queryset(self):
        queryset = exten_int.objects.all()
        print(queryset)
        return queryset.order_by('CONTEXT', 'EXTEN_INT')


class exten_extListView(generic.ListView):
    model = exten_ext
    paginate_by = 10

    class Meta:
        ordering = ['CONTEXT', 'EXTEN_EXT']

    def get_queryset(self):
class contextListView(generic.ListView):
    model = context
    paginate_by = 10

    class Meta:
        ordering = ['CONTEXT']

    def get_queryset(self):
        queryset = context.objects.all()
        return queryset.order_by('CONTEXT')


class contextDetailView(generic.DetailView):
    model = context
    paginate_by = 10

    class Meta:
        ordering = ['CONTEXT']

    def get_queryset(self):
        queryset = context.objects.all()
        return queryset.order_by('CONTEXT')


class sipuserListView(generic.ListView):
    model = sipuser
    paginate_by = 10

    class Meta:
        ordering = ['CONTEXT', 'SIPUSER']

    def get_queryset(self):
        queryset = sipuser.objects.all()
        return queryset.order_by('CONTEXT', 'SIPUSER')


class sipuserDetailView(generic.DetailView):
    model = sipuser
    paginate_by = 10

    class Meta:
        ordering = ['CONTEXT', 'SIPUSER']

    def get_queryset(self):
        queryset = sipuser.objects.all()
        return queryset.order_by('CONTEXT', 'SIPUSER')


class exten_intListView(generic.ListView):
    model = exten_int
    paginate_by = 10

    class Meta:
        ordering = ['CONTEXT', 'EXTEN_INT']

    def get_queryset(self):
        queryset = exten_int.objects.all()
        return queryset.order_by('CONTEXT', 'EXTEN_INT')


class exten_intDetailView(generic.DetailView):
    model = exten_int
    paginate_by = 10

    class Meta:
        ordering = ['CONTEXT', 'EXTEN_INT']

    def get_queryset(self):
        queryset = exten_int.objects.all()
        print(queryset)
        return queryset.order_by('CONTEXT', 'EXTEN_INT')


class exten_extListView(generic.ListView):
    model = exten_ext
    paginate_by = 10

    class Meta:
        ordering = ['CONTEXT', 'EXTEN_EXT']

    def get_queryset(self):
        queryset = exten_ext.objects.all()
        return queryset.order_by('CONTEXT', 'EXTEN_EXT')


class exten_extDetailView(generic.DetailView):
    model = exten_ext
    paginate_by = 10

    class Meta:
        ordering = ['CONTEXT', 'EXTEN_EXT']

    def get_queryset(self):
        queryset = exten_ext.objects.all()
        return queryset.order_by('CONTEXT', 'EXTEN_EXT')
        queryset = exten_ext.objects.all()
        return queryset.order_by('CONTEXT', 'EXTEN_EXT')


class exten_extDetailView(generic.DetailView):
    model = exten_ext
    paginate_by = 10

    class Meta:
        ordering = ['CONTEXT', 'EXTEN_EXT']

    def get_queryset(self):
        queryset = exten_ext.objects.all()
        return queryset.order_by('CONTEXT', 'EXTEN_EXT')

Я включил печать(queryset) в Проблемной области, поэтому я могу видеть правильный вывод набора запросов в консоли, как вы можете видеть здесь. enter image description here

Я не понимаю, почему это вообще не работает, а вывод отладки из Python / Django не помогает вообще. Трассировка не проблема в одном. Мои собственные файлы. У меня нет номера строки, и сама ошибка invalid literal for int() with base 10: 'telba.de_001' не имеет для меня никакого смысла.

Вот полный журнал отладки Django.

Environment:


Request Method: GET
Request URL: http://127.0.0.1:8000/catalog/exten_int/telba.de_001

Django Version: 2.2.4
Python Version: 3.7.3
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'catalog']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware']



Traceback:

File "C:\Users\mvanthiel\AppData\Local\Programs\Python\Python37\lib\site-packages\django\core\handlers\exception.py" in inner
  34.             response = get_response(request)

File "C:\Users\mvanthiel\AppData\Local\Programs\Python\Python37\lib\site-packages\django\core\handlers\base.py" in _get_response
  115.                 response = self.process_exception_by_middleware(e, request)

File "C:\Users\mvanthiel\AppData\Local\Programs\Python\Python37\lib\site-packages\django\core\handlers\base.py" in _get_response
  113.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "C:\Users\mvanthiel\AppData\Local\Programs\Python\Python37\lib\site-packages\django\views\generic\base.py" in view
  71.             return self.dispatch(request, *args, **kwargs)

File "C:\Users\mvanthiel\AppData\Local\Programs\Python\Python37\lib\site-packages\django\views\generic\base.py" in dispatch
  97.         return handler(request, *args, **kwargs)

File "C:\Users\mvanthiel\AppData\Local\Programs\Python\Python37\lib\site-packages\django\views\generic\detail.py" in get
  106.         self.object = self.get_object()

File "C:\Users\mvanthiel\AppData\Local\Programs\Python\Python37\lib\site-packages\django\views\generic\detail.py" in get_object
  36.             queryset = queryset.filter(pk=pk)

File "C:\Users\mvanthiel\AppData\Local\Programs\Python\Python37\lib\site-packages\django\db\models\query.py" in filter
  892.         return self._filter_or_exclude(False, *args, **kwargs)

File "C:\Users\mvanthiel\AppData\Local\Programs\Python\Python37\lib\site-packages\django\db\models\query.py" in _filter_or_exclude
  910.             clone.query.add_q(Q(*args, **kwargs))

File "C:\Users\mvanthiel\AppData\Local\Programs\Python\Python37\lib\site-packages\django\db\models\sql\query.py" in add_q
  1290.         clause, _ = self._add_q(q_object, self.used_aliases)

File "C:\Users\mvanthiel\AppData\Local\Programs\Python\Python37\lib\site-packages\django\db\models\sql\query.py" in _add_q
  1318.                     split_subq=split_subq, simple_col=simple_col,

File "C:\Users\mvanthiel\AppData\Local\Programs\Python\Python37\lib\site-packages\django\db\models\sql\query.py" in build_filter
  1251.         condition = self.build_lookup(lookups, col, value)

File "C:\Users\mvanthiel\AppData\Local\Programs\Python\Python37\lib\site-packages\django\db\models\sql\query.py" in build_lookup
  1116.         lookup = lookup_class(lhs, rhs)

File "C:\Users\mvanthiel\AppData\Local\Programs\Python\Python37\lib\site-packages\django\db\models\lookups.py" in __init__
  20.         self.rhs = self.get_prep_lookup()

File "C:\Users\mvanthiel\AppData\Local\Programs\Python\Python37\lib\site-packages\django\db\models\lookups.py" in get_prep_lookup
  70.             return self.lhs.output_field.get_prep_value(self.rhs)

File "C:\Users\mvanthiel\AppData\Local\Programs\Python\Python37\lib\site-packages\django\db\models\fields\__init__.py" in get_prep_value
  966.         return int(value)

Exception Type: ValueError at /catalog/exten_int/telba.de_001
Exception Value: invalid literal for int() with base 10: 'telba.de_001'

Я не думаю, что вам нужны файлы шаблонов, чтобы помочь мне, но здесь вы идете:

Это шаблон работающей детали Просмотр:

{% extends "base_generic.html" %}

{% block content %}
  <h1>Routing: {{ exten_ext.EXTEN_EXT }}</h1>

  <p><strong>Kontext:</strong> {{ exten_ext.CONTEXT }}</p>
  <p><strong>Auf Nebenstelle:</strong> {{ exten_ext.EXTEN_INT }}</p>
  <p><strong>TrunkID:</strong> {{ exten_ext.TRUNKID }}</p>

{% endblock %}

А это шаблон неработающего представления:

{% extends "base_generic.html" %}

{% block content %}
  <h1>Funktion: {{ exten_int.EXTEN_INT }}</h1>

  <p><strong>Kontext:</strong> {{ exten_int.CONTEXT }}</p>
  <p><strong>Funktionstyp:</strong> {{ exten_int.EXTEN_TYPE }}</p>
  <p><strong>Funktionsattribute:</strong> {{ exten_int.EXTEN_ATTRIBUTES }}</p>

{% endblock %}

Не могли бы вы мне помочь?

1 Ответ

1 голос
/ 09 октября 2019

Ich denke ich hab es jetzt. Я знаю, что это модель exten_int den ForeginKey EXTEN_INT durch ein normales Charfeld ausgetauscht und die Functionen str und get_absolute_url verändert sodass man jede instance_int instance_indeutig zuweisen kann.

1006 расширение расширение*: class exten_int(models.Model): """Model representing a Function z.b.context telba.de, nst 525 => exten_type, exten_attributes (like Voicemail, Fax2Mail ect.)""" id = models.AutoField(primary_key=True) # Default PK from Django CONTEXT = models.ForeignKey('context', verbose_name='Kontext', max_length=200, on_delete=models.SET_NULL, null=True, help_text='Kontext') EXTEN_INT = models.CharField('exten_int', max_length=20, unique=True, help_text='exten_int') EXTEN_TYPE = models.IntegerField('Funktion', default=10, help_text='Functions Typ') EXTEN_ATTRIBUTES = models.CharField('Attribute', max_length=200, help_text='Rufgruppe', default="call-00") def __str__(self): """String for representing the Model object Function.""" return str(str(self.CONTEXT)+"_"+str(self.EXTEN_INT)) def get_absolute_url(self): """Model representing a Function.""" return reverse('exten_int-detail', args=[str(self.CONTEXT)+"_"+str(self.EXTEN_INT)]) Im Шаблон der exten_int Liste Verlinke ich jede exten_int экземпляр auf diese weise: <a href="{{ exten_int.get_absolute_url }}"> {{ exten_int.CONTEXT }}_{{ exten_int.EXTEN_INT }} </a> ({{exten_int.EXTEN_TYPE}}, {{exten_int.EXTEN_ATTRIBUTES}}) In der URLS.py определено ich dien get absolut url Ссылка также neue Переменная context_extenint: path('exten_int/<str:context_extenint>', views.exten_intDetailView.as_view(), name='exten_int-detail'), Und zum schluss in der VIEWS.py habe ich dann die get get Функция überschrieben. В разделе «Разделяется» переменная context_extenint в контексте и расширении и фильтрации и фильтрации. Das First () ist nur damit Python nicht mäckert weil innerhalb eines представляет собой контекст EXTEN_INT nur einmal existieren exten_int.EXTEN_INT также уникален. class exten_intDetailView(generic.DetailView): model = exten_int paginate_by = 10 class Meta: ordering = ['CONTEXT', 'EXTEN_INT'] def get(self, request, context_extenint=None, **kwargs): """ `context_extenint` is from urls.py """ if context_extenint is not None: context, extenint = context_extenint.split('_') self.object = exten_int.objects.filter(Q(CONTEXT=context) and Q(EXTEN_INT=extenint)).first() item = self.get_context_data(object=self.object) return self.render_to_response(item) else: # default implementation return super().get(request, **kwargs) Так что Funktioniert die View immerhin wie erwartet. 1027
...