【问题标题】:Django form with ManyToMany field带有 ManyToMany 字段的 Django 表单
【发布时间】:2016-05-06 21:10:46
【问题描述】:

我正在使用 Django 构建一个简单的应用程序,我可以在其中记录和跟踪定期对放射治疗和放射设备执行的一组质量控制测试的信息。它显示了所有可用设备的列表,然后我可以选择执行一组测试或查看以前执行的其他活动。现在一切似乎都在工作。我可以创建新设备、新测试并过滤与该设备相关的测试。但现在我面临一个我无法解决的问题。这是我正在努力使用的模型的代码示例:

/models.py
class Test(models.Model):
    testgroup = models.ForeignKey(TestGroup)
    equipament = models.ManyToManyField(Equipament, blank=True)
    number = models.CharField(max_length=10)
    name = models.CharField(max_length=120)
    description = models.CharField(max_length=300, null=True, blank=True)
    frequency = models.ForeignKey(Frequency, null=True, blank=True)
    tolerance = models.CharField(max_length=30, null=True, blank=True)

    def __str__(self):
        return '%s%s%s %s' % (self.testgroup.modality, self.testgroup.abbreviation, self.number, self.name)

    pass


class Activity(models.Model):
    CONFORMANCE_CHOICES = (
        ('Yes', 'Yes'),
        ('No', 'No'),   
    )
    equipament = models.ForeignKey(Equipament, on_delete=models.CASCADE)
    type = models.ForeignKey(Type, null=True, blank=True)
    date = models.DateField(null=True, blank=True)
    summary = models.CharField(max_length=30, null=True, blank=True)
    user = models.CharField(max_length=50, null=True, blank=True)
    test = models.ManyToManyField(Teste, blank=True)
    conformance = models.CharField(max_length=10, choices=CONFORMANCE_CHOICES, null=True, blank=True)

    def __str__(self):
        return '%s %s' % (self.date, self.equipament)

        pass

我需要做的是能够保存结果,这是每个测试的一致性选择之一。我可以在“活动”视图中显示我想要执行的测试列表,但是如何为每个测试保存该一致性字段?我最好的方法是将一致性字段更改为 ManyToManyField 并通过表单创建测试和一致性之间的关系,但我为每个测试获得了所有一致性选择。如何只为一项测试定义一个一致性选项(选定的选项)?请帮忙...

【问题讨论】:

    标签: django django-models many-to-many


    【解决方案1】:

    我能够解决这个问题。我正在发布我的解决方案。也许有人有或将有同样的问题。为了执行我想要的操作,我使用inlinefomset_factory 创建了一个名为Results 的中间模型,其中ForeignKeyActivity。现在一切正常。

    【讨论】:

      猜你喜欢
      • 2020-02-18
      • 2011-05-08
      • 2015-05-15
      • 1970-01-01
      • 1970-01-01
      • 2017-04-06
      • 1970-01-01
      • 1970-01-01
      • 2017-01-15
      相关资源
      最近更新 更多