Django - несоответствие типа данных со случайным идентификатором - PullRequest
1 голос
/ 05 мая 2020

Я работаю над онлайн-викториной. Я не хочу, чтобы мои пользователи могли получить доступ к вопросам, набрав «/ questions / 1», поэтому мне нужен случайный идентификатор.
Я создал функцию, которая возвращает случайную строку (например, 'WUIbt'):

def random_id():
    char = "abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJQLMNOPQRSTUVWXY"
    id_len = 5
    question_id = "".join(random.sample(char, id_len))
    return question_id

Затем я использую его в своей модели вопроса:

class Question_Num(models.Model):

num_question = models.IntegerField(default=0)
question = models.TextField(max_length=1000, unique=True)
reponse  = models.IntegerField(default=0)
id = models.CharField(primary_key=True, default=random_id, editable=False, max_length=5)

class Meta:
    verbose_name = 'Question'
    verbose_name_plural = 'Questions'

def __str__(self):
    return f'Question n°{self.num_question}'

Но когда я создаю вопрос, у меня появляется ошибка datatype mismatch. Вот форма, если она вам понадобится:

class Form_Creation_Question(forms.ModelForm):
    num_question = forms.IntegerField(label='Numéro de la question')
    class Meta:
        model = Question_Num
        fields = ['num_question', 'question', 'reponse']

Должен ли я сгенерировать случайное число, которое я преобразовываю в шестнадцатеричный формат, или можно создать строковый идентификатор?

1 Ответ

0 голосов
/ 05 мая 2020

Моя ошибка была связана с моими миграциями. Я удалил все файлы миграции в своем приложении для вопросов и набрал python manage.py makemigrations и python manage.py migrate

Кроме того, как предложил @OriginalBBQSauce, я изменил:
id = models.CharField(primary_key=True, default=random_id, editable=False, max_length=5)
To:
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
Мне пришлось добавить import uuid в начале, чтобы он работал, иначе это вызвало бы ошибку.
Для тех, у кого была такая же ошибка и интересно, как выглядят мои URL-адреса:

from django.urls import path
from questions import views as q

urlpatterns = [
    path('', q.home, name='home'),
    path('creation/', q.creation, name='creation'),
    path('<str:id>/', q.question, name='question'),
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...