Администратор Django подсчитывает количество строк перед добавлением новых данных в режиме StackedInline
В моем проекте django у меня есть модель, связанная с основной моделью, как эта:
class Device_Docs(models.Model):
id = models.AutoField(primary_key=True)
master_id = models.ForeignKey(Device, on_delete=models.CASCADE)
device_file = models.FileField(upload_to='uploads/', validators=[FileExtensionValidator(['pdf', 'jpg', 'txt', 'png', 'jpeg']), validate_fsize], verbose_name="Select File", help_text='Allowed formats are PDF, JPG, JPEG, TXT, PNG, max size 3Mb')
title = models.CharField(max_length=250, help_text='Document title')
description = models.TextField(default='', verbose_name="Descrizione", null=True, blank=True)
load_data = models.DateField(default=datetime.now(roma).strftime("%Y-%m-%d %H:%M:%S.%f"), verbose_name="Load data")
owner = models.ForeignKey('accounts.CustomUser', related_name='odevdocs', on_delete=models.CASCADE)
...
Теперь я хочу показать в админке, для модели Device (основной модели), используя опцию StackedInline, данные обеих моделей:
class DocsInline(admin.StackedInline):
model = Device_Docs
extra = 1
@admin.register(Device)
class DeviceModelAdmin(admin.ModelAdmin):
list_display = ('mac_id', 'short_name', 'proj_type', 'polling_interval', 'active', 'autoupdate', 'save_date')
list_filter = ('polling_interval','proj_type', 'active', 'autoupdate')
search_fields = ('short_name', 'save_date' )
ordering = ('-save_date', 'mac_id')
readonly_fields = ('mac_id', )
inlines = [PortinInline, DocsInline]
def has_delete_permission(self, request, obj=None):
return False
def get_form(self, request, obj=None, **kwargs):
self.exclude = ("owner", "save_date")
form = super(DeviceModelAdmin, self).get_form(request, obj, **kwargs)
return form
Ok все работает хорошо, теперь мой вопрос в том, как я могу контролировать количество уже введенных строк о Device_Docs данных перед сохранением? Например, я хочу заблокировать возможность вставки данных, если в модели есть более 5 записей с одинаковым полем master_id.
Как я могу этого добиться?
Заранее большое спасибо