在 Django 中,我如何根据在两个模型中找到的字段自动创建多对多条目

In Django how I can create automatically a many to many entry based on a field found in two models

我有以下模型示例:

class TestSet(models.Model):
    name = models.CharField(max_length=50)

    def __str__(self):
        return self.name

class Class(models.Model):
    name = models.CharField(max_length=50)
    test_set_id = models.ForeignKey(TestSet)

    def __str__(self):
        return self.name

class Test(models.Model):
    title = models.CharField(max_length=50)
    test_set_id = models.ForeignKey(TestSet)

    def __str__(self):
        return self.title

class ClassTest(models.Model):
    class_id = models.ForeignKey(Class)
    test_id = models.ForeignKey(TestSet)
    memo = models.CharField(max_length=250)

    def __str__(self):
        return self.memo

我想做的是,当创建一个新的 Class 或测试时,它还应该自动创建一个 Class 测试条目,如果它们的 test_set_id 与数据库。

示例:

  1. 假设我已经有三个 Test 个对象 test_set_id = 1
  2. 我创建了一个新的 Class 对象 test_set_id = 1
  3. 创建新的 Class 对象后,程序还应该在 ClassTest 模型将 类 连接到基于 test_set_id 字段匹配的测试。
  4. 如果添加了新的 Test 对象,它应该可以正常工作。

所以我想到了两个答案:

  1. 您可以使用 Django Signals 创建一个接收器,在创建 Class 对象时执行特定命令。下面的代码周围的东西。考虑到 instance 基本上是刚刚创建的 class,您可以简单地使用标准的 django 查询来获取和创建其他对象。
@receiver(post_save, sender=Class)
def create_test_sets(sender, instance, created, **kwargs):
    if created:
        ///do things///
        
  1. 再三考虑,我会问您要解决的总体用例是什么。我觉得这里有一些冗余,但除非你帮我收集更大的图景,否则我无法完全弄清楚在哪里。