【问题标题】:How to apply DEBUG to the django admin forms fields?如何将 DEBUG 应用于 django 管理表单字段?
【发布时间】:2016-06-17 03:39:03
【问题描述】:

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

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

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

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

我的情况

  1. 在视频中详细说明了当我在父字段中仅选择受影响的段时,在子字段中部署移动选项,并且我的 Django 服务器的日志控制台出现 @987654326 @ 使用GET 操作,向我表明可以成功获取和部署与父字段中选择的受影响段相对应的动作

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

我不知道如何解决这种情况,因为在 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

【问题讨论】:

    标签: django django-models django-forms django-admin django-smart-selects


    【解决方案1】:

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

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

    "../RehabilitationSession/movement/4/"
    

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

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

    然后您会收到 404 错误。

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

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

    1. 如果你有这个技能,你可以尝试扩展上面提到的应用,自己实现解析器和url模式。

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

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

    【讨论】:

    • 作为第一步,我非常感谢您,花时间阅读我的问题,观看视频并分析我的具体情况。对我来说这是无价的:D
    • 你有理由,urls.py 文件没有一些允许处理多个选项的正则表达式,当我选择在我的链接过程中受损的模型实例的两个或多个选项时。基本上这是我的问题的原因和答案,应用调试过程是不必要的。
    • 我对您提供给我的选项有一些疑问: 1. 根据第一个选项,我应该在 url 中实现一些模式,让我使用逗号分隔的整数,这是真的。但是,关于解析器通过多个条件过滤结果......我如何思考开发这个?你能再给我一些关于它的信息吗?
    • 与选项 2 相关。当您说:> 但没有 jQuery 修补,它不会有实时更改...您的意思是如果我不使用 jQuery,这会没有反映在我的表单行为中?在我评估继续的选项之间,我认为我可以尝试另一个应用程序或覆盖管理类的视图,虽然我不放弃扩展 django-smart-selects 应用程序的替代方案,但我想知道更多关于您在第一个选项中向我提供的建议,以防万一。
    • 当结果是模型链接的产品时,当结果被过滤时,可能会修改为查询集in some section?关于 url 逗号分隔的整数,我想到了一些资源:stackoverflow.com/questions/16321007/…stackoverflow.com/questions/2921453/…
    猜你喜欢
    • 2013-06-16
    • 2010-10-06
    • 1970-01-01
    • 2012-12-04
    • 2017-05-05
    • 2016-08-13
    • 1970-01-01
    • 2022-11-13
    • 2017-01-17
    相关资源
    最近更新 更多