فرض کن من یه مدل دارم به اسم Product
که توی یه اپ به اسم shop هست.
با فرض اینکه آیدی Product م 14 باشه.
لینک ویرایش ش توی ادمین جنگو این میشه:
http://127.0.0.1:8000/admin/shop/product/14/change/
اگه با یوزر ادمین توی وردپرس لاگین باشید، دکمه ویرایش همه جا هست و مستقیم میره برای ویرایش.
برای همچین چیزی توی پروژه جنگو به درد میخوره.
حالا چطور لینک بدیم؟
میدونیم که بهتره از تمپلت تگ url و اسم url استفاده کنیم.
اما اسمش چیه؟
اینجوریه:
<a href="{% url 'admin:shop_product_change' product.id %}" target="_blank">Edit Product</a>دقت کردی؟
اسم اپ admin ع
بعد اسم url ترکیب اسم اپ خودمون + اسم مدل + عملیاتی که میخواهیم انجام بدیم.
از کجا اینارو میاره؟
وقتی داری توی admin.py مدل هارو رجیستر میکنی، از اونجا بر میداره.
توی کدهای جنگو دنبال کلاس AdminSite بگرد و متد get_urls رو ببین. این تیکه س:
# Add in each model's views, and create a list of valid URLS for the
# app_index
valid_app_labels = []
for model, model_admin in self._registry.items():
urlpatterns += [
path(
"%s/%s/" % (model._meta.app_label, model._meta.model_name),
include(model_admin.urls),
),
]
if model._meta.app_label not in valid_app_labels:
valid_app_labels.append(model._meta.app_label)