2

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

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

  • 视频中的父字段Segmento afectado让我多选

  • 视频中的子字段Movimiento,详细说明受影响的片段(在父字段中选择)可以执行的动作

我的情况

  1. 在视频中详细说明了一种方式,即当我在父字段中仅选择受影响的段时,在子字段中部署了动作选项,并且我的 Django Server 的日志控制台出现status code HTTP/1.1 200GET操作,向我表明有可能成功获取和部署与父字段中选择的受影响段相对应的动作

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

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

我有一个名为的模型AffectedSegment和另一个名为的模型Movement,并且通过django-smart-selectsChainedManyToManyField的功能是如何根据父字段中的选择获取部署在子字段中的值的方式。

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

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

并且我得到子字段中的运动根据父字段上的选择出现的方式是这样执行的:

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

4

1 回答 1

1

只需简单地看一下您的视频和“django-smart-select”应用程序的代码,我就可以看出这个应用程序并不是为了做您正在尝试的事情。

当您只选择一个选项时,您的 url 的结尾如下所示:

"../RehabilitationSession/movement/4/"

但是当您选择两个选项时,您的网址如下所示:

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

然后你得到 404 错误。

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

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

  1. 如果您有技能,您可以尝试扩展上述应用程序并自己实现解析器和 url 模式。

  2. 您可以在管理类中执行相同的操作,方法是根据上述字段的选择覆盖您的字段查询,但如果没有 jQuery 修补,它不会有实时更改。

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

于 2016-03-12T10:00:39.850 回答