Django: Странная ошибка при соединении между представлением, шаблоном и url
У меня есть две страницы main usage
и main model
, на которых перечислены продукты определенного использования или модели.
У меня есть следующие представления для этих страниц:
def get_common_queryset():
usage_queryset = Usage.objects.all()
sub_usage_queryset = SubUsage.objects.all()
main_model_queryset = MainModel.objects.all()
pump_type_queryset = PumpType.objects.all()
queryset_dictionary = {
"usage_queryset": usage_queryset,
"sub_usage_queryset": sub_usage_queryset,
"main_model_queryset": main_model_queryset,
"pump_type_queryset": pump_type_queryset,
}
return queryset_dictionary
def products_usage_main(request):
queryset_dictionary = get_common_queryset()
context = queryset_dictionary
return render(request, "products/products_usage_main.html", context)
def products_model_main(request):
queryset_dictionary = get_common_queryset()
context = queryset_dictionary
return render(request, "products/products_model_main.html", context)
Здесь у нас есть функция get_common_queryset()
, о причине которой вы можете прочитать в этом вопросе. Затем у нас есть две похожие функции представления, products_usage_main
и product_model_main
, но с разными шаблонами.
В urls.py
у меня есть следующие пути для этих представлений:
urlpatterns = [
path("application/", products_usage_main, name="products_usage_main"),
path("model/", products_model_main, name="products_model_main"),
]
И снова мы видим, что два пути похожи, просто с разными взглядами.
Наконец, у меня есть два отдельных шаблона для этих двух представлений, код которых не нужен и не связан с проблемой, с которой я столкнулся.
ПРОБЛЕМА:
На боковой панели моей страницы продуктов у меня есть две основные ссылки /products/application/
и /products/model/
, и когда я нажимаю на /products/application/
, все работает просто отлично, но когда нажимается /products/model/
, я получаю следующую ошибку:
ValidationError at /products/model/
['“model” is not a valid UUID.']
Когда я проверил ошибку трассировки, он сказал, что проблема возникла из product_detail
представления и в строке product = Product.objects.get(id=pk)
, которая не имеет НИКАКОГО отношения к этим двум страницам и их представлениям!
Ниже приведен мой вид product_detail
:
def product_detail(request, pk):
product = Product.objects.get(id=pk)
head_flow_dataset = HeadFlowDataSet.objects.filter(
product=product
).order_by("flow")
context_of_view = {
"product": product,
"head_flow_dataset_x": [],
"head_flow_dataset_y": [],
}
for head_flow in head_flow_dataset:
context_of_view["head_flow_dataset_x"].append(head_flow.flow)
context_of_view["head_flow_dataset_y"].append(head_flow.head)
queryset_dictionary = get_common_queryset()
context = {
**context_of_view,
**queryset_dictionary,
}
return render(request, "products/product_detail.html", context)
Ниже я отправляю полный отслеживание ошибки, если вам это нужно:
Для решения этой проблемы я пересмотрел другие свои взгляды, особенно взгляд product_detail
, и попытался понять, почему именно этот взгляд должен быть источником этой проблемы.
В моем products/urls.py
у меня был путь к product_detail
виду, который выглядел следующим образом:
path("<str:pk>/", product_detail, name="product_detail"),
С другой стороны model page
url, как упоминалось выше, был следующим:
path("model/", products_model_main, name="products_model_main"),
Так что я предполагаю, что сходство между этими двумя путями было источником проблемы, и когда я изменил url пути product_detal
на path("product-detail/<str:pk>/
, обе страницы работали просто отлично.