URL Джанго с проблемой UUID - PullRequest
       36

URL Джанго с проблемой UUID

0 голосов
/ 24 сентября 2019

Начальная ошибка: когда CustomerID был CharField в models.py:

Error Message :

после внесения изменений в модель и внесенияCustomerID UUIDField , получая следующую ошибку:

enter image description here

Я пытаюсь перенаправить на представление на основе CustomerID, но это не такработает на UUID.Ранее он работал нормально с целыми числами.

Пожалуйста, предложите.

url.py:

from django.urls import path, include
from . import views

urlpatterns = [
   path('create/', views.create, name='create'),
   path('<uuid:customer_id>', views.detail, name='detail'),
   path('search/customers/<uuid:customer_id>', views.detail, name='detail'),
   path('customers/<uuid:customer_id>', views.detail, name='detail'),
   path('edit/<uuid:customer_id>', views.edit, name='edit'),
   path('modify/<uuid:customer_id>', views.modify, name='modify'),
]

views.py

 @login_required
 def detail(request, customer_id):
     customer = get_object_or_404(CustomerMaster, pk=customer_id)
     return render(request, 'customers/detail.html',{'customer':customer})

моделей.py

   class CustomerMaster(models.Model):
         customerid = models.UUIDField(db_column='CustomerID', primary_key=True)  # Field name made lowercase.
         customernumber = models.CharField(db_column='CustomerNumber', max_length=50)  # Field name made lowercase.
         customername = models.CharField(db_column='CustomerName', max_length=50)  # Field name made lowercase.
          lastmodifiedutc = models.DateTimeField(db_column='LastModifiedUTC')  # Field name made lowercase.
          lastmodifiedby = models.CharField(db_column='LastModifiedBy', max_length=50)  # Field name made lowercase.
          active = models.BooleanField(db_column='Active')  # Field name made lowercase.
         customershortname = models.CharField(db_column='CustomerShortName', max_length=50, blank=True, null=True)  # Field name made lowercase.


      class Meta:
            managed = False
            db_table = 'Customer_Master'

            def __str__(self):
                return self.CustomerName

Ответы [ 3 ]

0 голосов
/ 24 сентября 2019

Решено путем присвоения CustomerID в качестве CharField и передачи строкового параметра в URL.

0 голосов
/ 24 сентября 2019

Для UUIDField похоже, что вы используете базу данных Microsoft SQLServer, которая не поддерживает UUIDField должным образом ...

Так что, если вы используете CharField, вы, вероятно, захотите ввести проверку UUID регулярного выражения вво входящем поле uuid проверьте это:

Поиск идентификаторов UUID в тексте с помощью регулярного выражения

Как уже упоминалось, вы хотите убедиться, что значение DB согласовано, поэтому используйте .lower()на проверенном вводе будет хорошей идеей.

0 голосов
/ 24 сентября 2019

Буквы в UUID должны быть строчными в соответствии с документами :

uuid - соответствует форматированному UUID.Чтобы предотвратить сопоставление нескольких URL-адресов с одной и той же страницей, необходимо включить тире, а буквы должны быть строчными.Например, 075194d3-6885-417e-a8a8-6c931e272f00 .Возвращает UUID экземпляр.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...