使用ManyToMany字段的Django表单

时间:2016-05-06 21:10:46

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

我正在使用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

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

1 个答案:

答案 0 :(得分:0)

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