Модель используется для хранения вещей (в базе данных). Сравнение между двумя предметами обычно стоит , а не . Прежде всего это приведет к масштабированию квадратичных c: если у вас есть 100 Computer
объектов, то будет 9'990 возможных сравнений, если число Computer
с удваивается, то общее число сравнений примерно равно four .
Но, вероятно, более серьезным является тот факт, что вы вводите дублирование данных . Скорее всего, вы будете хранить (части) одни и те же данные дважды или более в базе данных. Проблема с дублированием данных состоит в том, что оказывается, что трудно хранить эти дубликаты в syn c. Представьте, что вы, например, изменили price
одного из Computer
объектов, а затем необходимо обновить также объекты ComputerComparison
, на которые ссылается этот компьютер. Хотя это может показаться простой задачей, это означает, что все создания, обновления, удаления и, вероятно, из нескольких полей должны быть приняты во внимание. Синхронизация данных даже в одной и той же базе данных является сложной проблемой, поэтому ее лучше избегать.
Но в любом случае вам, скорее всего, не нужно хранить сравнения вообще. Обычно это делается с помощью представления. Представление, которое, например, дает два первичных ключа для сравнения двух элементов:
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})