Как фильтровать столбцы для каждого в одной модели в админке Django
У меня есть модель под названием Product. Я использую StackedInline для отображения ProductCostCalculator в моей панели администратора.
Проблема, с которой я столкнулся, заключается в том, что в моей модели ProductCostCalculator
будет 20+ столбцов. Некоторые столбцы из ProductCostCalculator
не нужны в каждом элементе модели Product
, поэтому я хочу исключить все столбцы, которые не нужны. Я знаю, что могу просто поставить 0 или '-' по умолчанию и вставить значения в нужные столбцы в панели администратора, но я хотел бы сделать это более динамичным, чтобы пользователю, который будет добавлять компоненты калькулятора, не приходилось делать это вручную.
Например, я хочу добавить 2 элемента к моей модели Product
. Назовем их Item 1
и Item 2
. В Item 1
мне нужно будет вставить значения в field_1
, field_2
и field_3
. В Item 2
в моей модели Product
мне нужно будет вставить значения только для field_3
, field_4
и field_5
.
Вопрос:
Как я могу назначить колонку из ProductCostCalculator
элементу в модели Product
или как я могу отфильтровать все колонки, которые не нужны в конкретном элементе в модели Product
.
Я не уверен, что что-то подобное возможно, поэтому я ищу несколько советов.
models.py
class Product(models.Model):
title = models.CharField(max_length=400, blank=False, null=False, help_text='max 400 characters', default='')
last_updated = models.DateTimeField(auto_now=True)
publish = models.DateTimeField('Published on', default=timezone.now)
class CalculatorComponent(models.Model):
service = models.CharField(max_length=500, default='', blank=True)
product = models.ManyToManyField(Product, related_name='calculator_service_component_product', blank=True, default='-')
component = models.CharField(max_length=500, default='', blank=True)
body = models.TextField(default='', blank=True)
class ProductCostCalculator(models.Model):
component = models.ForeignKey(CalculatorServiceComponent, on_delete=models.CASCADE, default=1)
related_product = models.ForeignKey(Product, on_delete=models.CASCADE, null=True, blank=True)
field_1= models.CharField(max_length=125, choices=LANGUAGES, default='-')
field_2 = models.FloatField(default=0)
field_3 = models.IntegerField(default=0)
field_4= models.FloatField(default=0.0)
field_5 = models.FloatField(default=0.0)
admin.py
class ProductCostCalculatorInline(admin.StackedInline):
model = ProductCostCalculator
class ProductAdmin(ImportExportModelAdmin):
inlines = [ProductCostCalculatorInline,]
resource_class = ProductResource