#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)