Я пытался в основном скопировать поведение 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)])
Изображение этой модели устарело, но можетдать общее представление о моделях.
для полноты 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) в Проблемной области, поэтому я могу видеть правильный вывод набора запросов в консоли, как вы можете видеть здесь.
Я не понимаю, почему это вообще не работает, а вывод отладки из 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 %}
Не могли бы вы мне помочь?