Как сгенерировать пути UUID в views.py в Джанго?

#python #django #uuid

#python #django #uuid

Вопрос:

Я хотел бы создать объект в views.py с идентификатором, использующим UUID, а затем введите его конкретный путь непосредственно из файла views, в котором я его создал. Ошибка, которую я получаю,:

Ошибка типа в /item/create_item _reverse_with_prefix() аргумент после * должен быть итерируемым, а не UUID

Итак, мне интересно, знает ли кто-нибудь способ, как это можно сделать?

models.py:

 class Item(models.Model):
    id = models.UUIDField(
        primary_key=True, default=uuid.uuid4, editable=False)
    name = models.CharField(max_length=100, blank=True)

  

views.py

 def create_item(request):

    context = {}

    if request.method == 'POST':
        name = request.POST['name']

        item = Item(name=name)
        item.save()

        return HttpResponsePermanentRedirect(reverse('item', args=(item.id)))

    return render(request, 'items/item.html', context)


def item(request, pk):
    item = get_object_or_404(Item, pk=pk)
    
    #Code to be written

  

Ответ №1:

Вы должны обернуть item.id в одноэлементный кортеж, используя (…,) :

 return HttpResponsePermanentRedirect(reverse('item', args=(item.id,)))  

Однако вы можете использовать redirect(…) функцию [Django-doc], которая в основном обертывает результат a reverse(…) в a HttpResponseRedirect(…) , но вместо этого предлагает интерфейс с позиционными и именованными параметрами:

 from django.shortcuts import redirect

return redirect('item', pk=item.id, permanent=True)