django 和 DB 建模:我想我有很多错误

django and DB modeling: I think I've got Many to Many wrong

我有一个对象 Option 就像一个类型,它只有一个 属性: name (将来它可能有更多的属性)。 Option 的实例具有唯一的名称。

许多对象可能有零个或多个 Option 个实例。

例如:

class Consumer:
    options = models.ManyToManyField(Option, blank=True, help_text="the options")

但是,为了为 Consumer 的多对多 options 关系创建 Option 实例,我需要创建一个新的 Option实例并将其添加到 options.

这可是"breaks"我的独特之处:现在我有两个同名的! Option I create.for Many-to-Many 链接的每个实例依此类推。我的数据库中现在有 68 个,而不是我需要的 4 个...

我相信我从根本上误解了 Many-To-Many,和/或错误地设计了这种关系...

有人可以帮忙吗?

编辑:这是我在示例中设置选项的方式:

def enable_option(request, pk=0, option_pk=0, *args, **kwargs):
    consumer = get_object_or_404(Consumer, pk=pk)
    option = get_object_or_404(Option, pk=option_pk)

    new_option = Option()
    new_option.name = option.name // I know I am breaking my own rule...but when I read the consumer options, I need the exact same name! Still, I believe I am modeling wrong
    new_option.save()
    consumer.options.add(new_option)
    consumer.save()

    return HttpResponse()

我不太明白你为什么要在这里创建一个新的选项。你得到现有的;您可以将其添加到关系中:

consumer = get_object_or_404(Consumer, pk=pk)
option = get_object_or_404(Option, pk=option_pk)
consumer.options.add(option)

您甚至不需要调用 save,因为修改 m2m 不会更改实例本身。