我正在处理模型中的字段,其中字段的值取决于表单中先前字段中的选定选项(目前通过 django 管理员),我正在使用 django-smart-selects
我会分享这个视频,以便更好地了解我的问题或情况,以及询问与我在这种情况下工作的领域相关的应用调试或净化方式的原因。
-
视频中的父字段
Segmento afectado
让我选择多个选项 -
视频中的子字段
Movimiento
详细说明受影响的区段(在父字段中选择)可以执行的动作
我的情况
-
在视频中详细介绍了一种明确的方式,当我在父字段中仅选择受影响的段时,移动选项将部署在子字段中,并且我的 Django Server 日志控制台显示带有
GET
操作的status code HTTP/1.1 200
,向我指示有可能成功获取和部署与父字段中选择的受影响段相对应的移动 -
但是,当我在父字段中选择多个受影响的段时(如果我向前选择两个或多个段),我的 django 服务器会在控制台上立即向我显示
status code HTTP/1.1 404
(Not Found
黄色),因为不执行第二个选择或用户选择的第二个受影响的段,并且由于这个原因也没有部署或出现在子字段中与这些第二个受影响的动作相关联段可以执行
我不知道如何解决这种情况,因为这种形式在 django 管理员中表示父 ( Segmento Afectado
) 和子 ( Movimiento
) 字段。
我有一个名为 AffectedSegment
的模型和另一个名为 Movement
的模型,通过 django-smart-selects ChainedManyToManyField
的功能是如何使子字段中部署的值与父字段中的选择保持一致的方式。
我的模型和此行为的值链接是:
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?另一个姜戈应用程序?
任何支持,方向,将不胜感激
:D
只需简要查看您的视频和"django-smart-select"应用程序的代码,我可以看到此应用程序并不是为了做您正在尝试的事情。
当您只选择一个选项时,网址的结尾如下所示:
"../RehabilitationSession/movement/4/"
但是,当您选择两个选项时,您的网址如下所示:
"../RehabilitationSession/movement/4,5/"
然后你得到 404 错误。
您错误的原因在于应用程序"django-smart-select"没有适当的 url 模式来处理"4,5"块。为此,它需要接受逗号分隔的整数,然后在应用程序中实现某种解析器,以按多个条件过滤结果。
我不能给你完整的答案,但我可以告诉你,你有几个选择:
如果你有这个技能,你可以尝试扩展提到的应用程序,并自己实现解析器和url模式。
您可以在 admin 类中执行相同的操作,方法是根据上述字段的选择覆盖字段的查询,但如果没有 jQuery 修补,它就不会有实时更改。
您可以尝试其他应用程序,但我不能保证您会为您的问题找到合适的解决方案。