Ваш вопрос и пример кода не понятны.Прежде всего следует разбить модель на несколько вариантов использования:
- Клиент: список клиентов, клиент Создать, прочитать, обновить и удалить (CRUD)
- Продукт: списокproducts, Create, Read, Update & Delete (CRUD) product
Из списка клиентов вы можете прочитать одно, а в «подробном представлении» вы можете создать, обновить или удалить его.
Из списка продуктов вы можете прочитать один, а в «представлении подробностей» вы можете создать, обновить или удалить его.
Можно выполнить переход от списка клиентов к списку продуктов.с помощью дополнительной кнопки / ссылки, отображаемой на каждой строке в вашем списке клиентов, чтобы ваша кнопка / ссылка использовалась для отображения любых сведений о клиенте.
PrimaryKey (PK) клиента передается в детали через определение URL.
path('customer/<pk>', views.customer_detail_view, name='customer_detail'),
Этот URL предназначен только для отображения.Вам также нужен один для каждой операции БД: создание, обновление, удаление.Ниже приведен пример кода urls.py для вашего клиента.Для продуктов вам понадобится то же самое.
from django.urls import path
from . import views
urlpatterns = urlpatterns + [
path('customer', views.customer_list_view, name='customer_list'),
path('customer/add', views.customer_add_view, name='customer_add'),
path('customer/<pk>', views.customer_detail_view, name='customer_detail'),
path('customer/<pk>/upd', views.customer_update_view, name='customer_update'),
path('customer/<pk>/del', views.customer_delete_view, name='customer_delete'),
]
Обратите внимание, что create не передает 'pk', поскольку оно пока неизвестно ...
Вызов в подробном представлении изпредставление списка выполняется в вашем html-шаблоне
<tbody>
{% for i in customer_list %}
<tr>
<td><a href="{% url 'customer_detail' pk=i.id %}">{{ i.customerName }}</a></td>
<td>{{ i.customerContent|default_if_none:"" }}</td>
</tr>
{% endfor %}
</tbody>
Аргумент передается через kwargs (dict) через URL, и если вы используете ClassBasedView (generic.DetailView), он будет обработан автоматически.Если нет, вам нужно взять kwargs, например: kwargs.get('pk') or kwargs.pop('pk')
последний удаляет pk из kwargs.Вы также можете передать 'pk' используя args (без назначения ключа pk) {% url 'customer_detail' i.id %}
.Это также может быть определено непосредственно в функции get_absolute_url вашей модели.def get_absolute_url (self): вернуть reverse_lazy ('customer_detail', args = [str (self.id)]) или def get_absolute_url (self): вернуть reverse_lazy ('customer_detail', kwargs = {'pk': self.pk})
Поступая таким образом, вы также сможете управлять своей глобальной переменной productName, чего следует избегать!Кстати, я не понимаю, почему вы готовы разделить создание productName и productInfo ???Почему бы не хранить их все вместе?
Наконец, если вы хотите отобразить несколько возможных строк кодирования для вашего Продукта, вам следует взглянуть на Django-FormSet .Поищите в Google учебник по FormSet, но это более продвинутая функция.
ProductFormset с 5 возможными строками кодирования будет выглядеть следующим образом:
from django.forms import modelformset_factory
ProductFormset = modelformset_factory(
productInfo,
fields=('productName', ),
extra=5,
widgets={'name': forms.TextInput(attrs={
'class': 'form-control',
'placeholder': 'Enter product Name here'
})
}
)