为Django建立一个元-中间比较模型值得吗?

为Django建立一个元-中间比较模型值得吗?,django,Django,我是Django的新手,我想知道如何最好地构建我的模型 我有一台型号为的计算机,有屏幕大小、价格、公司等字段,最终希望有一个能够与其他计算机实例进行比较的UI 因此,例如,如果我们正在查看ComputerA,UI将显示所有其他Computer实例,并将价格、屏幕大小和公司与ComputerA 想知道是否值得拥有一个中间模型ComputerComparison,它有两个外键引用我试图比较的计算机实例?模型用于存储东西(在数据库中)。两个项目之间的比较通常不值得存储。首先,这是二次的:如果你有100

我是Django的新手,我想知道如何最好地构建我的模型

我有一台型号为
的计算机
,有
屏幕大小
价格
公司
等字段,最终希望有一个能够与其他
计算机
实例进行比较的UI

因此,例如,如果我们正在查看
ComputerA
,UI将显示所有其他
Computer
实例,并将价格、屏幕大小和公司与
ComputerA

想知道是否值得拥有一个中间模型
ComputerComparison
,它有两个外键引用我试图比较的
计算机
实例?

模型用于存储东西(在数据库中)。两个项目之间的比较通常不值得存储。首先,这是二次的:如果你有100个
Computer
对象,那么有9'990个可能的比较,如果
Computer
s的数量加倍,那么总的比较数量大约是4倍

但可能更严重的是,您引入了数据复制。您可能会在数据库中存储(部分)相同数据两次或更多次。重复数据的问题在于,很难保持这些重复数据的同步。例如,假设您更改一个
计算机
对象的
价格
,那么引用该计算机的
计算机比较
对象也需要更新。尽管这看起来可能是一项简单的任务,但这意味着需要考虑所有创建、更新、删除和可能的多个字段。即使在同一个数据库上,保持数据同步也是一个困难的问题,因此最好避免

但无论如何,您可能根本不需要存储比较。通常这些都是通过视图完成的。例如,视图中给出了两个要比较的项目的主键:

def compare(request, pk1, pk2):
    c1 = get_object_or_404(Computer, pk=pk1)
    c2 = get_object_or_404(Computer, pk=pk2)
    # … compare c1 and c2 …
    return render(request, 'some_template.html', {'some_vars': some_vals})
模型是用来存储东西的。比较通常是您在视图中确定的内容。存储它还将导致数据重复,这很难同步。