Как заполнить поля в самом CreateView

#python-3.7 #django-2.1

#python-3.7 #django-2.1

Вопрос:

Я создаю проект, и у меня есть одно сомнение, поэтому сайт, если для центра поддержки, где проект django регистрирует обращение для пользователя после того, как пользователь заполнит общую форму.

Итак, я создал регистр имени модели, и в нем есть такие поля, как case_number, email и все такое.

Теперь, в views.py я использую CBV CreateView для создания, сохранения пользовательской формы и простого создания регистрационного номера.

Где я застрял, номер обращения, который представляет собой 10-значное строковое поле, должен быть создан случайным образом, но как мне сохранить его после того, как клиент закончит заполнять форму?

поскольку любое неправильное упоминание в полях будет отображаться как ввод для customer, а case_number — это не то, что я хочу, чтобы клиент его заполнял, оно должно быть сгенерировано автоматически.

Я считаю, что это можно сделать просто:-

r2 = [random.randint(0, 10),random.randint(0, 10),random.randint(0, 10),random.randint(0, 10),random.randint(0, 10),random.randint(0, 10),random.randint(0, 10),random.randint(0, 10),random.randint(0, 10),random.randint(0, 10),random.randint(0, 10),random.randint(0, 10),random.randint(0, 10),random.randint(0, 10),random.randint(0, 10),random.randint(0, 10),random.randint(0, 10)]

case_number = («.join(str(x) для x в r2))

и в CBV CreateView позволит мне случайным образом создать число и сохранить его, но я хочу, чтобы это было сделано на серверной части, поэтому я не могу упомянуть это в create view,

Это просто сомнение, я уже пробовал.

models.py

 class Case:
    case_number = models.CharField(max_length=10)
    issue=models.TextField()
    product=models.CharField(max_field=100)

    def get_absolute_url(self):
        return reverse('case:single')
  

Views.py

 class CaseCreation(CreateView):
    model=Case
    fields=('issue', 'product')
    r2=[random.randint(0,10), random.randint(0,10), random.randint(0,10), random.randint(0,10), random.randint(0,10), random.randint(0,10), random.randint(0,10), random.randint(0,10), random.randint(0,10), random.randint(0,10)]

    self.case_number = (''.join(str(x) for x in r2))
  

Ожидаемый результат заключается в том, что я хочу случайным образом получить 10-значное число, которое будет отправлено клиенту и сохранено в базе данных

DB — это sql lite3.

Ответ №1:

Хорошо, просто чтобы вы, ребята, знали, что я, наконец, придумал ответ,

Я определил логику создания обращений в models.py как показано ниже.

 def case_generation(self):
    r2=[random.randint(0,10), random.randint(0,10), random.randint(0,10), random.randint(0,10), random.randint(0,10), random.randint(0,10), random.randint(0,10), random.randint(0,10), random.randint(0,10), random.randint(0,10)]
    self.case_number = (''.join(str(x) for x in r2))
    self.save()
  

Теперь в views.py я определил функцию и вызвал функцию, определенную в models.py и сохранить.

 @login_required
def case_number_generation(request, pk):
    case = get_object_or_404(Case, pk=pk)
    case.case_generation()
    return redirect("cases:single_pk", pk=case.pk)
  

в промежутке между этим я определил urls.py таким образом, чтобы пользователь генерировал обращение, функции будут вызываться сами по себе.

Если вам интересно ознакомиться с полным кодом, не беспокойтесь, дайте мне знать, я опубликую его здесь, если потребуется. 😉