Изменение размера поля массива 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 и нахожу приложение администратора немного сложным для манипуляций. Кто-нибудь может мне помочь? Я был бы очень признателен! Заранее спасибо
Что ж, я провел свое исследование. И вот как это оказалось:
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 был единственным, что помогло мне выбраться из этой проблемы