如何使用modelForms在同一表格中使用两个以上的模型?

时间:2019-01-27 06:15:05

标签: python django django-models django-forms

我正在使用Django创建一个新应用程序,我的应用程序需要一种在db上添加数据的表格。我使用的是 4种型号,它们均通过外键连接。如果不可能,我该如何使用 modelForm 将数据输入表单并将其直接添加到db中?

我检查了仅适用于2个模型的现有解决方案,但找不到适合于自己的问题的方法。我尝试使用 inlineformset ,但是正如我所说,我无法弄清楚如何将所有模型一起实现它。

我也浏览了Django文档两次,但找不到任何此类信息(也许我很想念)。

我的模型是这样的:

class Question(models.Model):
    year = models.CharField(max_length=5)
    source = models.CharField(max_length=140)
    problemNumber = models.CharField(max_length=16)
    weblink = models.CharField(max_length=200)
    date_posted = models.DateTimeField(default=timezone.now)
    problemStatement = models.TextField()
    author = models.ForeignKey(User, on_delete=models.PROTECT)

class QLevel(models.Model):
    qID = models.ForeignKey(Question, on_delete=models.CASCADE)
    level = models.CharField(max_length=16)

class QMethod(models.Model):    
    qID = models.ForeignKey(Question, on_delete=models.CASCADE)
    method = models.CharField(max_length=40)

class QSubject(models.Model):
    qID = models.ForeignKey(Question, on_delete=models.CASCADE)
    subject = models.CharField(max_length=35)

可以看出,有3个模型是通过外键连接到 Question 模型的,而 Question 模型是连接到 User 的。

我有一个简单的表单,我基本上输入了所有需要的信息(给定的所有字段),并希望它直接将它们输入到db。如果可以的话,请指导我,如果不能,请解释为什么不可以,我还可以尝试其他什么方法?

谢谢!

1 个答案:

答案 0 :(得分:0)

经过一段时间的研究,我发现将多个外键连接的表单呈现为extra_views的扩展名的最佳和最简便的方法。如果有人在寻找解决方案,我认为目前没有更好的解决方案。

这里django submit two different forms with one submit button给出的解决方案也可以使用,但是如果您使用带有外键的基于模型的形式(如我),我会发现这种方法非常混乱并且难以使用。