Изменение размера поля массива django в зависимости от другого поля?

Я создаю приложение, которое отображает различные курсы. Для каждого курса есть список различных классов, которые он имеет. Некоторые курсы имеют два класса, некоторые восемь, некоторые только один или в будущем некоторые курсы могут иметь 10 классов. Это зависит от администратора приложения, когда он регистрирует новый курс

class Curso(models.Model):
    clases = models.IntegerField(default=1)
    content = ArrayField(models.CharField(max_length=30),blank=False)

Эта модель будет только для администратора.

Я хочу хранить различные классы (только их названия) в массиве. Но нет необходимости показывать 8+ полей, если админ будет заполнять только одно... Или это правильный подход?

Я хочу, чтобы у администратора было целочисленное поле, в которое он вводит количество классов курса, и в зависимости от этого отображаются поля массива.

Как я понимаю, у ArrayField есть атрибут size, в котором я могу указать длину массива. Верно? Итак, мой вопрос таков:

Есть ли способ динамически изменять размер массива в зависимости от того, что админ вводит в поле "clases"?

Мне нужно, чтобы это работало в приложении администратора. Я новичок в django и нахожу приложение администратора немного сложным для манипуляций. Кто-нибудь может мне помочь? Я был бы очень признателен! Заранее спасибо

Что ж, я провел свое исследование. И вот как это оказалось: enter image description here

models.py

from django.db import models
from django_better_admin_arrayfield.models.fields import ArrayField

# Create your models here.

class Course(models.Model):
     ...
    clases = ArrayField(models.CharField(max_length=10),null=True,blank=True, size=8)
    ...

Оказывается, мне просто нужно было использовать ArrayField с django-better-admin-arrayfield. Это не делает в точности то, что я описал в этом вопросе, но работает так же хорошо (даже лучше) для визуального редактирования поля массива на странице администратора

Здесь репозиторий django-better-admin-arrayfield

Вам просто нужно pip install его, а затем добавить его в settings.py установленных приложений

INSTALLED_APPS = [
  ...
   'django_better_admin_arrayfield',
  ...

В admin.py

from django.contrib import admin
from .models import Course
from django_better_admin_arrayfield.admin.mixins import DynamicArrayMixin


@admin.register(Course)
class CursoAdmin(admin.ModelAdmin, DynamicArrayMixin):
    ...

И это было все! makemigrations и migrate и... Это не сработало. Проблема заключалась в том, что кнопка add another button не работала. Поэтому я прочитал проблемы в репо и кто-то написал, что нужно запустить collectstatic и это сработало!!!

Выражаю благодарность @nbeuchat, кто бы это ни был, ответ которого в этом посте stackoverflow был единственным, что помогло мне выбраться из этой проблемы

Вернуться на верх