first commit
This commit is contained in:
0
autoapp/__init__.py
Normal file
0
autoapp/__init__.py
Normal file
BIN
autoapp/__pycache__/__init__.cpython-311.pyc
Normal file
BIN
autoapp/__pycache__/__init__.cpython-311.pyc
Normal file
Binary file not shown.
BIN
autoapp/__pycache__/admin.cpython-311.pyc
Normal file
BIN
autoapp/__pycache__/admin.cpython-311.pyc
Normal file
Binary file not shown.
BIN
autoapp/__pycache__/apps.cpython-311.pyc
Normal file
BIN
autoapp/__pycache__/apps.cpython-311.pyc
Normal file
Binary file not shown.
BIN
autoapp/__pycache__/forms.cpython-311.pyc
Normal file
BIN
autoapp/__pycache__/forms.cpython-311.pyc
Normal file
Binary file not shown.
BIN
autoapp/__pycache__/models.cpython-311.pyc
Normal file
BIN
autoapp/__pycache__/models.cpython-311.pyc
Normal file
Binary file not shown.
BIN
autoapp/__pycache__/urls.cpython-311.pyc
Normal file
BIN
autoapp/__pycache__/urls.cpython-311.pyc
Normal file
Binary file not shown.
BIN
autoapp/__pycache__/views.cpython-311.pyc
Normal file
BIN
autoapp/__pycache__/views.cpython-311.pyc
Normal file
Binary file not shown.
13
autoapp/admin.py
Normal file
13
autoapp/admin.py
Normal file
@@ -0,0 +1,13 @@
|
||||
from django.contrib import admin
|
||||
|
||||
# Register your models here.
|
||||
|
||||
from .models import Auto
|
||||
|
||||
|
||||
@admin.register(Auto)
|
||||
class AutoAdmin(admin.ModelAdmin):
|
||||
list_display = ("brand", "model", "year", "color", "created_at")
|
||||
list_filter = ("brand", "year", "color")
|
||||
search_fields = ("brand", "model")
|
||||
ordering = ("-year", "brand")
|
||||
6
autoapp/apps.py
Normal file
6
autoapp/apps.py
Normal file
@@ -0,0 +1,6 @@
|
||||
from django.apps import AppConfig
|
||||
|
||||
|
||||
class AutoappConfig(AppConfig):
|
||||
default_auto_field = "django.db.models.BigAutoField"
|
||||
name = "autoapp"
|
||||
37
autoapp/forms.py
Normal file
37
autoapp/forms.py
Normal file
@@ -0,0 +1,37 @@
|
||||
from django import forms
|
||||
from .models import Auto
|
||||
|
||||
|
||||
class AutoForm(forms.ModelForm):
|
||||
class Meta:
|
||||
model = Auto
|
||||
fields = ['brand', 'model', 'year', 'color']
|
||||
|
||||
# Настройка виджетов и стилей (опционально, но улучшает внешний вид)
|
||||
widgets = {
|
||||
'brand': forms.TextInput(attrs={
|
||||
'class': 'form-control',
|
||||
'placeholder': 'Например: Toyota, BMW, Lada'
|
||||
}),
|
||||
'model': forms.TextInput(attrs={
|
||||
'class': 'form-control',
|
||||
'placeholder': 'Например: Camry, X5, Granta'
|
||||
}),
|
||||
'year': forms.NumberInput(attrs={
|
||||
'class': 'form-control',
|
||||
'placeholder': 'Год выпуска (например, 2023)',
|
||||
'min': 1900,
|
||||
'max': 2100,
|
||||
}),
|
||||
'color': forms.TextInput(attrs={
|
||||
'class': 'form-control',
|
||||
'placeholder': 'Например: чёрный, серебристый, красный'
|
||||
}),
|
||||
}
|
||||
|
||||
# Дополнительная валидация (опционально)
|
||||
def clean_year(self):
|
||||
year = self.cleaned_data.get('year')
|
||||
if year and (year < 1900 or year > 2100):
|
||||
raise forms.ValidationError("Год выпуска должен быть в разумных пределах (1900–2100)")
|
||||
return year
|
||||
77
autoapp/migrations/0001_initial.py
Normal file
77
autoapp/migrations/0001_initial.py
Normal file
@@ -0,0 +1,77 @@
|
||||
# Generated by Django 5.2.11 on 2026-02-22 06:48
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = []
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name="Auto",
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
models.BigAutoField(
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
verbose_name="ID",
|
||||
),
|
||||
),
|
||||
(
|
||||
"brand",
|
||||
models.CharField(
|
||||
help_text="Например: Toyota, BMW, Lada",
|
||||
max_length=100,
|
||||
verbose_name="Марка",
|
||||
),
|
||||
),
|
||||
(
|
||||
"model",
|
||||
models.CharField(
|
||||
help_text="Например: Camry, X5, Granta",
|
||||
max_length=100,
|
||||
verbose_name="Модель",
|
||||
),
|
||||
),
|
||||
(
|
||||
"year",
|
||||
models.PositiveIntegerField(
|
||||
help_text="Год выпуска автомобиля (например, 2023)",
|
||||
verbose_name="Год выпуска",
|
||||
),
|
||||
),
|
||||
(
|
||||
"color",
|
||||
models.CharField(
|
||||
blank=True,
|
||||
default="Не указан",
|
||||
help_text="Например: чёрный, серебристый, красный",
|
||||
max_length=50,
|
||||
verbose_name="Цвет",
|
||||
),
|
||||
),
|
||||
(
|
||||
"created_at",
|
||||
models.DateTimeField(
|
||||
auto_now_add=True, verbose_name="Дата создания записи"
|
||||
),
|
||||
),
|
||||
(
|
||||
"updated_at",
|
||||
models.DateTimeField(
|
||||
auto_now=True, verbose_name="Дата последнего изменения"
|
||||
),
|
||||
),
|
||||
],
|
||||
options={
|
||||
"verbose_name": "Автомобиль",
|
||||
"verbose_name_plural": "Автомобили",
|
||||
"ordering": ["-year", "brand", "model"],
|
||||
},
|
||||
),
|
||||
]
|
||||
0
autoapp/migrations/__init__.py
Normal file
0
autoapp/migrations/__init__.py
Normal file
BIN
autoapp/migrations/__pycache__/0001_initial.cpython-311.pyc
Normal file
BIN
autoapp/migrations/__pycache__/0001_initial.cpython-311.pyc
Normal file
Binary file not shown.
BIN
autoapp/migrations/__pycache__/__init__.cpython-311.pyc
Normal file
BIN
autoapp/migrations/__pycache__/__init__.cpython-311.pyc
Normal file
Binary file not shown.
50
autoapp/models.py
Normal file
50
autoapp/models.py
Normal file
@@ -0,0 +1,50 @@
|
||||
from django.db import models
|
||||
|
||||
# Create your models here.
|
||||
|
||||
class Auto(models.Model):
|
||||
"""Модель автомобиля"""
|
||||
|
||||
brand = models.CharField(
|
||||
max_length=100,
|
||||
verbose_name="Марка",
|
||||
help_text="Например: Toyota, BMW, Lada"
|
||||
)
|
||||
|
||||
model = models.CharField(
|
||||
max_length=100,
|
||||
verbose_name="Модель",
|
||||
help_text="Например: Camry, X5, Granta"
|
||||
)
|
||||
|
||||
year = models.PositiveIntegerField(
|
||||
verbose_name="Год выпуска",
|
||||
help_text="Год выпуска автомобиля (например, 2023)",
|
||||
)
|
||||
|
||||
color = models.CharField(
|
||||
max_length=50,
|
||||
verbose_name="Цвет",
|
||||
blank=True, # можно не указывать цвет
|
||||
null=False,
|
||||
default="Не указан",
|
||||
help_text="Например: чёрный, серебристый, красный"
|
||||
)
|
||||
|
||||
created_at = models.DateTimeField(
|
||||
auto_now_add=True,
|
||||
verbose_name="Дата создания записи"
|
||||
)
|
||||
|
||||
updated_at = models.DateTimeField(
|
||||
auto_now=True,
|
||||
verbose_name="Дата последнего изменения"
|
||||
)
|
||||
|
||||
class Meta:
|
||||
verbose_name = "Автомобиль"
|
||||
verbose_name_plural = "Автомобили"
|
||||
ordering = ["-year", "brand", "model"]
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.brand} {self.model} ({self.year})"
|
||||
3
autoapp/tests.py
Normal file
3
autoapp/tests.py
Normal file
@@ -0,0 +1,3 @@
|
||||
from django.test import TestCase
|
||||
|
||||
# Create your tests here.
|
||||
7
autoapp/urls.py
Normal file
7
autoapp/urls.py
Normal file
@@ -0,0 +1,7 @@
|
||||
from django.urls import path
|
||||
from . import views
|
||||
|
||||
urlpatterns = [
|
||||
path('add/', views.AutoCreateView.as_view(), name='add_auto'),
|
||||
path('', views.auto_list, name='auto_list'),
|
||||
]
|
||||
21
autoapp/views.py
Normal file
21
autoapp/views.py
Normal file
@@ -0,0 +1,21 @@
|
||||
from django.shortcuts import render
|
||||
from django.views.generic import CreateView
|
||||
from django.urls import reverse_lazy
|
||||
from .models import Auto
|
||||
from .forms import AutoForm
|
||||
from django.contrib import messages
|
||||
|
||||
class AutoCreateView(CreateView):
|
||||
model = Auto
|
||||
form_class = AutoForm
|
||||
template_name = 'autoapp/add_auto.html'
|
||||
success_url = reverse_lazy('auto_list') # или другая страница
|
||||
|
||||
def form_valid(self, form):
|
||||
response = super().form_valid(form)
|
||||
messages.success(self.request, 'Автомобиль успешно добавлен!')
|
||||
return response
|
||||
|
||||
def auto_list(request):
|
||||
autos = Auto.objects.all().order_by('-year', 'brand', 'model')
|
||||
return render(request, 'autoapp/auto_list.html', {'autos': autos})
|
||||
Reference in New Issue
Block a user