首页 > 解决方案 > 根据另一个字段更改 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 新手,我发现管理应用程序有点难以操作。

标签: pythondjangodjango-modelsdjango-admin

解决方案


好吧,我做了我的研究。结果是这样的: 在此处输入图像描述

模型.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)
    ...

原来我只需要将ArrayFielddjango-better-admin-arrayfield 一起使用 它并没有完全按照我在这个问题中描述的那样工作,但是在管理页面中可视化编辑 arrayfield 的效果一样好(甚至更好)

这是存储库django-better-admin-arrayfield

您只需要 pip 安装它,然后将其添加到您的 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 和...它没有工作。问题是添加另一个按钮不起作用。所以我阅读了回购中的问题,有人写道你应该运行 collectstatic 并且它有效!

向@nbeuchat 大喊,不管是谁,在这个stackoverflow 帖子中的回答是唯一能帮助我摆脱这个问题的东西


推荐阅读