如何将 DEBUG 应用于 django 管理表单字段?

How to apply DEBUG to the django admin forms fields?

我正在处理模型中的字段,其中字段的值取决于表单中前一个字段中的 selected 选项(目前通过 django 管理员),我是使用 django-smart-selects

我会分享 this video 以便更好地了解我的问题或情况以及询问与我在这种情况下工作的领域相关的应用调试或净化方式的原因。

我的情况

  1. 视频里有详细的方法讲清楚,当我select只在parent字段中受影响的segment时,动作的选项都部署在child字段中,而我的log Django 服务器的控制台出现 status code HTTP/1.1 200GET 操作,向我表明可以成功获取并部署与受影响的段相对应的移动 select 在父字段中编辑

  2. 但是,当我 select 父字段中有多个受影响的段时(如果我 select 两个或更多段向前),我的 django 服务器会立即控制台显示 status code HTTP/1.1 404(黄色的 Not Found),因为没有执行第二个 selection 或用户 select 的第二个受影响的部分,并且由于这个原因也不要在子字段中部署或出现这些第二个受影响的段可以执行的相关动作

我不知道如何解决这种情况,因为这种形式是在 django 管理员内部表示父 (Segmento Afectado) 和子 (Movimiento) 字段。

我有一个名为 AffectedSegment 的模型和另一个名为 Movement 的模型,通过 ChainedManyToManyFielddjango-smart-selects 的功能是我获取值的方式根据父字段中的 selection 部署在子字段中。

我的模型和此行为的价值链是:

class AffectedSegment(models.Model):
    SEGMENTO_ESCAPULA = 'ESCAPULA'
    SEGMENTO_HOMBRO = 'HOMBRO'
    SEGMENTO_CODO = 'CODO'
    SEGMENTO_ANTEBRAZO = 'ANTEBRAZO'
    SEGMENTO_CARPO_MUNECA = 'CARPO_MUNECA'
    SEGMENTO_MANO = 'MANO'
    SEGMENTO_CHOICES = (
        (SEGMENTO_ESCAPULA, u'Escápula'),
        (SEGMENTO_HOMBRO, u'Hombro'),
        (SEGMENTO_CODO, u'Codo'),
        (SEGMENTO_ANTEBRAZO, u'Antebrazo'),
        (SEGMENTO_CARPO_MUNECA, u'Carpo/Muñeca'),
        (SEGMENTO_MANO, u'Mano'),
    )
    affected_segment = models.CharField(max_length=12, choices=SEGMENTO_CHOICES, blank=False, verbose_name='Segmento afectado')

    class Meta:
        verbose_name = 'Segmentos corporale'

    def __str__(self):
        return "%s" % self.affected_segment

class Movement(models.Model):
    type = models.CharField(max_length=255,verbose_name='Tipo de movimiento')
    corporal_segment_associated = models.ManyToManyField(AffectedSegment, blank=False, verbose_name='Segmento corporal asociado')

    class Meta:
        verbose_name = 'Movimiento'

    def __str__(self):
        return "%s" % self.type

我或我得到的方式是根据父字段上的 selection 在子字段中出现运动是这样执行的:

class RehabilitationSession(models.Model):

    affected_segment = models.ManyToManyField(AffectedSegment,verbose_name='Segmento afectado')
    movement = ChainedManyToManyField(
        Movement, #Modelo encadenado
        chained_field = 'affected_segment',
        chained_model_field = 'corporal_segment_associated',
        verbose_name='Movimiento'
    )

    class Meta:
        verbose_name = 'Sesiones de Rehabilitación'

    def __str__(self):
        return "%s" % self.affected_segment

我不知道如何解决这种情况。 我还有什么其他选择? JS,一些框架forntend? 另一个 Django 应用程序?

任何支持和指导,将不胜感激

:D

通过简单地查看您的视频和 "django-smart-select" 应用程序的代码,我可以看出该应用程序并非旨在执行您正在尝试的操作。

当你select只有一个选项时,你的url的结尾是这样的:

"../RehabilitationSession/movement/4/"

但是当你 select 两个选项时,你的 url 看起来像这样:

"../RehabilitationSession/movement/4,5/" 

然后您收到 404 错误。

您出错的原因在于应用程序 "django-smart-select" 没有适当的 url 模式来处理“4,5”块。为此,它需要接受以逗号分隔的整数,然后在应用程序中实现某种解析器以按多种条件过滤结果。

我不能给你完整的答案,但我可以告诉你,你有几个选择:

  1. 如果你有能力,你可以尝试扩展提到的应用程序并自己实现解析器和 url 模式。

  2. 您可以在您的管理员 class 中做同样的事情,方法是根据上述字段的 selection 覆盖您字段的查询,但没有 jQuery 修修补补,不会有实时变化。

  3. 您可以尝试其他应用程序,但我不能保证您会找到适合您问题的解决方案。