feat: add ReferenceItem model and update QuickEvaluation FKs

- Create ReferenceitemModel with type, name, parent (self FK), order, is_active fields
- Add ReferenceType choices: brand, marka, color, fuel_type, body_type, car_position, state_car
- Implement ReferenceItem API (list, retrieve) with filter by type/parent/is_active, search, ordering
- Add ReferenceItem admin with list_filter, search, inline editing
- Change QuickEvaluation FK fields from shared.OptionsModel to evaluation.ReferenceitemModel
- Update serializers and views to use .name instead of .key
- Add ReferenceItem to unfold admin navigation
This commit is contained in:
Husanjonazamov
2026-03-09 16:04:15 +05:00
parent fd2ecd953a
commit 3798037240
36 changed files with 744 additions and 106 deletions

View File

@@ -0,0 +1,109 @@
# Generated by Django 5.2.7 on 2026-03-09 09:57
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('evaluation', '0011_update_choices_to_english'),
('shared', '0002_settingsmodel_created_at_settingsmodel_description_and_more'),
]
operations = [
migrations.RemoveField(
model_name='quickevaluationmodel',
name='condition',
),
migrations.RemoveField(
model_name='quickevaluationmodel',
name='license_plate',
),
migrations.RemoveField(
model_name='quickevaluationmodel',
name='manufacture_year',
),
migrations.RemoveField(
model_name='quickevaluationmodel',
name='mileage',
),
migrations.RemoveField(
model_name='quickevaluationmodel',
name='model',
),
migrations.RemoveField(
model_name='quickevaluationmodel',
name='tech_passport_number',
),
migrations.AddField(
model_name='quickevaluationmodel',
name='car_manufactured_date',
field=models.IntegerField(blank=True, null=True, verbose_name='manufacture year'),
),
migrations.AddField(
model_name='quickevaluationmodel',
name='car_number',
field=models.CharField(blank=True, max_length=20, null=True, verbose_name='car number'),
),
migrations.AddField(
model_name='quickevaluationmodel',
name='car_position',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='quick_eval_positions', to='shared.optionsmodel', verbose_name='car position'),
),
migrations.AddField(
model_name='quickevaluationmodel',
name='distance_covered',
field=models.IntegerField(blank=True, null=True, verbose_name='distance covered (km)'),
),
migrations.AddField(
model_name='quickevaluationmodel',
name='marka',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='quick_eval_markas', to='shared.optionsmodel', verbose_name='marka'),
),
migrations.AddField(
model_name='quickevaluationmodel',
name='tech_passport_issued_date',
field=models.DateField(blank=True, null=True, verbose_name='tech passport issued date'),
),
migrations.AddField(
model_name='quickevaluationmodel',
name='tech_passport_issued_place',
field=models.CharField(blank=True, max_length=255, null=True, verbose_name='tech passport issued place'),
),
migrations.AddField(
model_name='quickevaluationmodel',
name='tex_passport_file',
field=models.FileField(blank=True, null=True, upload_to='quick_evaluation/tech_passports/%Y/%m/', verbose_name='tech passport file'),
),
migrations.AddField(
model_name='quickevaluationmodel',
name='tex_passport_serie_num',
field=models.CharField(blank=True, max_length=20, null=True, verbose_name='tech passport series and number'),
),
migrations.AlterField(
model_name='quickevaluationmodel',
name='body_type',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='quick_eval_body_types', to='shared.optionsmodel', verbose_name='body type'),
),
migrations.AlterField(
model_name='quickevaluationmodel',
name='brand',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='quick_eval_brands', to='shared.optionsmodel', verbose_name='brand'),
),
migrations.AlterField(
model_name='quickevaluationmodel',
name='color',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='quick_eval_colors', to='shared.optionsmodel', verbose_name='color'),
),
migrations.AlterField(
model_name='quickevaluationmodel',
name='fuel_type',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='quick_eval_fuel_types', to='shared.optionsmodel', verbose_name='fuel type'),
),
migrations.AlterField(
model_name='quickevaluationmodel',
name='state_car',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='quick_eval_states', to='shared.optionsmodel', verbose_name='car state'),
),
]

View File

@@ -0,0 +1,33 @@
# Generated by Django 5.2.7 on 2026-03-09 10:49
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('evaluation', '0012_remove_quickevaluationmodel_condition_and_more'),
]
operations = [
migrations.CreateModel(
name='ReferenceitemModel',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('created_at', models.DateTimeField(auto_now_add=True)),
('updated_at', models.DateTimeField(auto_now=True)),
('type', models.CharField(choices=[('brand', 'Brand'), ('marka', 'Marka'), ('color', 'Color'), ('fuel_type', 'Fuel type'), ('body_type', 'Body type'), ('car_position', 'Car position'), ('state_car', 'Car state')], max_length=50, verbose_name='type')),
('name', models.CharField(max_length=255, verbose_name='name')),
('order', models.IntegerField(default=0, verbose_name='order')),
('is_active', models.BooleanField(default=True, verbose_name='is active')),
('parent', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='children', to='evaluation.referenceitemmodel', verbose_name='parent')),
],
options={
'verbose_name': 'Reference Item',
'verbose_name_plural': 'Reference Items',
'db_table': 'ReferenceItem',
'ordering': ['type', 'order', 'name'],
},
),
]

View File

@@ -0,0 +1,49 @@
# Generated by Django 5.2.7 on 2026-03-09 10:51
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('evaluation', '0013_referenceitemmodel'),
]
operations = [
migrations.AlterField(
model_name='quickevaluationmodel',
name='body_type',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='quick_eval_body_types', to='evaluation.referenceitemmodel', verbose_name='body type'),
),
migrations.AlterField(
model_name='quickevaluationmodel',
name='brand',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='quick_eval_brands', to='evaluation.referenceitemmodel', verbose_name='brand'),
),
migrations.AlterField(
model_name='quickevaluationmodel',
name='car_position',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='quick_eval_positions', to='evaluation.referenceitemmodel', verbose_name='car position'),
),
migrations.AlterField(
model_name='quickevaluationmodel',
name='color',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='quick_eval_colors', to='evaluation.referenceitemmodel', verbose_name='color'),
),
migrations.AlterField(
model_name='quickevaluationmodel',
name='fuel_type',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='quick_eval_fuel_types', to='evaluation.referenceitemmodel', verbose_name='fuel type'),
),
migrations.AlterField(
model_name='quickevaluationmodel',
name='marka',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='quick_eval_markas', to='evaluation.referenceitemmodel', verbose_name='marka'),
),
migrations.AlterField(
model_name='quickevaluationmodel',
name='state_car',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='quick_eval_states', to='evaluation.referenceitemmodel', verbose_name='car state'),
),
]