Упрощена модель Shop и реализован полный CRUD для магазинов

- Упрощена модель Shop: только name обязательное поле
- Удалены поля: district, режим работы, координаты, инструкции
- Description перенесено после name
- Все поля кроме name теперь опциональные

- Создан полный CRUD для магазинов:
  * ShopListView - список магазинов с пагинацией
  * ShopCreateView - создание нового магазина
  * ShopUpdateView - редактирование магазина
  * ShopDeleteView - удаление с подтверждением

- Создана форма ShopForm с Bootstrap стилями
- Поле "Название магазина" помечено как обязательное (*)
- Настроена обработка PhoneNumberField

- Созданы шаблоны:
  * shop_list.html - таблица со списком магазинов
  * shop_form.html - форма создания/редактирования
  * shop_confirm_delete.html - подтверждение удаления

- Настроены URLs для приложения shops
- Добавлена ссылка "Магазины" в главную навигацию
- Обновлена админ-панель shops

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-11-12 00:10:34 +03:00
parent 7858c780d1
commit a1f5733fde
11 changed files with 477 additions and 80 deletions

View File

@@ -0,0 +1,61 @@
# Generated by Django 5.0.10 on 2025-11-11 20:55
import phonenumber_field.modelfields
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('shops', '0001_initial'),
]
operations = [
migrations.RemoveIndex(
model_name='shop',
name='shops_shop_distric_04626c_idx',
),
migrations.RemoveField(
model_name='shop',
name='closing_time',
),
migrations.RemoveField(
model_name='shop',
name='delivery_instructions',
),
migrations.RemoveField(
model_name='shop',
name='district',
),
migrations.RemoveField(
model_name='shop',
name='latitude',
),
migrations.RemoveField(
model_name='shop',
name='longitude',
),
migrations.RemoveField(
model_name='shop',
name='opening_time',
),
migrations.RemoveField(
model_name='shop',
name='working_days',
),
migrations.AlterField(
model_name='shop',
name='building_number',
field=models.CharField(blank=True, max_length=20, null=True, verbose_name='Номер здания'),
),
migrations.AlterField(
model_name='shop',
name='phone',
field=phonenumber_field.modelfields.PhoneNumberField(blank=True, help_text='Контактный телефон магазина', max_length=128, null=True, region=None, verbose_name='Телефон'),
),
migrations.AlterField(
model_name='shop',
name='street',
field=models.CharField(blank=True, max_length=255, null=True, verbose_name='Улица'),
),
]