from django.apps.registry.Apps import get_model
def get_object_from_string(string):
app_label, model_name, pk = string.split('.')
model = get_model(app_label, model_name)
return model.objects.get(pk=int(pk))
phone = get_object_from_string('cart.Phone.123')
get_object_from_string
получаете из строки экземпляры моделей продуктов. post_save
срабатывает после сохранения, и чтобы увидеть изменения нужно перечитать экземпляр модели из базы. Для обычных CRUD операций это не имеет особого значения.@receiver(post_save, sender=FingerPrint)
def update_calculated_fields(sender, instance, **kwargs):
tlsh = instance.calculate_tlsh()
instance.tlsh = tlsh
sender.objects.filter(pk=instance.pk).update(tlsh=tlsh)
Module
— есть один модуль. Каждый экземпляр VendorModule
— есть связь одного вендора с одним модулем. Например, у нас есть два вендора связанных с пятью модулями. Тогда в базе будет десять экземляров VendorModule
.OneToOneField
использовать ForeignKey
. Поправил в ответе. delete_question()
тоже должна быть уникальной: delete_question_{{ i.id }}()
. Вызов тоже поменяется: onclick="delete_question_{{ i.id }}"
path('page/<int:pk>/delete/', views.ArticleDeleteView.as_view(), name='delete_page')
<td>
<form id="delete_form_{{ i.id }}" action="{% url 'delete_page' i.id %}" method="post">{% csrf_token %}</form>
<a href="javascript:void()" onclick="delete_question">удалить</a>
<script>
function delete_question() {
if (confirm("Вы уверены")) {
document.getElementById('delete_form_{{ i.id }}').submit()
}
}
</script>
</td>
DetailView
, ListView
, CreateView
, UpdateView
, DeleteView
и TemplateView
.self.kwargs
. Если мысленно переименовать его в self.url_kwargs
, то всё станет интуитивно понятно. Смотрите, у вас в urls.py
есть такой адрес:path('categories/<slug:category_slug>/', views.ProductView.as_view(), name='product_list_by_categories')
<slug:category_slug>
и попадает в словарь self.kwargs
, как category_slug
. То есть при запросе /categories/kolgotki/
в self.kwargs
будет записан словарик {'category_slug': 'kolgotki'}
.