неправильно сформированная шестнадцатеричная строка ошибки UUID для первичного ключа UUID - PullRequest
0 голосов
/ 13 марта 2019

Я пытаюсь загрузить свою таблицу, но получаю эту ошибку, скорее всего потому, что мой первичный ключ - uuid.

Вот мои пути URL.

path('results/', views.results, name='results'),
path('results/<uuid:pk>/', views.genre_book, name='books_genre_table'),

Вот мой views.py Если есть одно наблюдение, мы загружаем таблицу цен.Если нет, то мы загружаем таблицу с описаниями услуг.Затем пользователь может выбрать наиболее интересующую его услугу и перейти к таблице цен на эту услугу.Это не работает.Первое представление «результаты» работает, но второе представление book_genre - нет.

 def results(request):
    query_string = ''
    found_entries = None
    if ('s' in request.GET) and request.GET['s'].strip():
        query_string = request.GET['s']
        entry_query = get_query(query_string,['service__desc_us', 'com_desc'])
        _objs = Price.objects.filter(entry_query).values('service__join').distinct()
        num_obj = Price.objects.filter(entry_query).values('service__join').distinct().count()
        if num_obj == 1:
            Price_objs = Price.objects.filter(entry_query).order_by("price_offer")
            table = PriceTable(Price_objs)
            RequestConfig(request).configure(table)
        if num_obj > 1:
            model = Service
            entry_query = get_query(query_string,['desc_us', 'price__com_desc'])
            serv_obj = Service.objects.filter(entry_query).distinct()
            table = ServiceTable(serv_obj)
            RequestConfig(request).configure(table)
    return render(request, 'results.html', {'table': table})

def genre_book(request, pk):
     serv_obj = Service.objects.get(pk=pk)
     price_obj = Price.objects.filter(service=serv_obj).values("join")
     table = PriceTable(price_obj)
     RequestConfig(request).configure(table)
     return render(request, 'results.html', {'table': table})

Вот мой файл tables.py

class PriceTable(tables.Table):
    class Meta:
        model = Price
        template_name = 'django_tables2/bootstrap4.html'
        sequence = ('service', 'price_offer')
        exclude = ('priceid', 'com_desc', "comments")
        attrs = {"class": "darkblue"}

class ServiceTable(tables.Table):
    desc_us = tables.LinkColumn('books_genre_table', args=[A('pk')])
    class Meta:
        model = Service
      ...

Вот моя модель для обслуживания:

class Service(models.Model):
    serviceid = models.UUIDField(default=uuid.uuid4, primary_key=True,
      help_text='Unique ID for this particular service in database', editable=False)
    desc_us = models.TextField(blank=True)
    join = models.IntegerField(default= 10000) #foreign key with price model

    class Meta:
        ordering = ['serviceid']

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

class Price(models.Model):
  priceid = models.UUIDField(primary_key=True, default=uuid.uuid4, help_text='Unique ID for this particular service in database')
  com_desc = models.CharField(max_length = 200, blank = True, null = True)
  service = models.ForeignKey("Service", on_delete=models.SET_NULL, null=True)
  price_offer = models.DecimalField(max_digits=8, decimal_places=2, blank=True)

  class Meta:
       ordering =['service']

  def __str__(self):
       return f'{self.service.desc_us} ({self.price_offer})'

Распечатка FULL ERROR

Error during template rendering
In template 
projects/hosproject/venv/lib/python3.7/site-packages/django_tables2/templates/django_tables2/bootstrap4.html, error at line 26

badly formed hexadecimal UUID string
16                              {{ column.header }}
17                          {% endif %}
18                      </th>
19                  {% endfor %}
20                  </tr>
21                  </thead>
22              {% endif %}
23              {% endblock table.thead %}
24              {% block table.tbody %}
25                  <tbody {{ table.attrs.tbody.as_html }}>
 #below row highlighted
26                  {% for row in table.paginated_rows %}
27                      {% block table.tbody.row %}
28                      <tr scope="row" {{ row.attrs.as_html }}>
29                          {% for column, cell in row.items %}
30                              <td {{ column.attrs.td.as_html }}>{% if column.localize == None %}{{ cell }}{% else %}{% if column.localize %}{{ cell|localize }}{% else %}{{ cell|unlocalize }}{% endif %}{% endif %}</td>
31                          {% endfor %}
32                      </tr>
33                      {% endblock table.tbody.row %}
34                  {% empty %}
35                      {% if table.empty_text %}
36                      {% block table.tbody.empty_text %}

Вот начало трассировки:

File "projects/hosproject/venv/lib/python3.7/site-packages/django/template/base.py" in render_annotated
  904.             return self.render(context)

File "projects/hosproject/venv/lib/python3.7/site-packages/django/template/defaulttags.py" in render
  166.             len_values = len(values)

File "/projects/hosproject/venv/lib/python3.7/site-packages/django_tables2/rows.py" in __len__
  335.         length = len(self.data)

File "/projects/hosproject/venv/lib/python3.7/site-packages/django/db/models/query.py" in __len__
  250.         self._fetch_all()

File "projects/hosproject/venv/lib/python3.7/site-packages/django/db/models/query.py" in _fetch_all
  1186.             self._result_cache = list(self._iterable_class(self))

File "/projects/hosproject/venv/lib/python3.7/site-packages/django/db/models/query.py" in __iter__
  63.         for row in compiler.results_iter(results):

File "/projects/hosproject/venv/lib/python3.7/site-packages/django/db/models/sql/compiler.py" in apply_converters
  1009.                     value = converter(value, expression, connection)

File "/projects/hosproject/venv/lib/python3.7/site-packages/django/db/backends/sqlite3/operations.py" in convert_uuidfield_value
  263.             value = uuid.UUID(value)

File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/uuid.py" in __init__
  160.                 raise ValueError('badly formed hexadecimal UUID string')

Exception Type: ValueError at /results/
Exception Value: badly formed hexadecimal UUID string

Вот что вызывает эту ошибку в исходном коде, uuid.py

    if hex is not None:
        hex = hex.replace('urn:', '').replace('uuid:', '')
        hex = hex.strip('{}').replace('-', '')
        if len(hex) != 32:
            raise ValueError('badly formed hexadecimal UUID string')
        int = int_(hex, 16)
...