Я недавно начал оценивать Django для миграции нашего архаичного веб-приложения, написанного 10 лет назад.В течение последних нескольких дней я читал документацию по Django, но не смог найти лучший способ добиться объединения базы данных в несколько таблиц в моем случае:
Model:
class Product(models.Model):
productid = models.IntegerField(primary_key=True, db_column='ProductId')
productname = models.CharField(max_length=120, db_column='ProductName')
class Testcases(models.Model):
testcaseid = models.IntegerField(primary_key=True, db_column='TestCaseId')
testcasename = models.CharField(max_length=240, db_column='TestCaseName')
class Testmatrix(models.Model):
testmatrixid = models.IntegerField(primary_key=True, db_column='TestMatrixId')
productid = models.ForeignKey(Product, db_column='ProductId')
testcaseid = models.ForeignKey(Testcases, db_column='TestCaseId')
class Status(models.Model):
testmatrixid = models.ForeignKey(Testmatrix, db_column='TestMatrixId')
title = models.CharField(max_length=240, db_column='Title', blank=True)
(Примечаниеэта модель была сгенерирована inspectdb, и я бы предпочел не изменять ее в данный момент). Шаблон
View:
from django.shortcuts import render_to_response
from mysite.testmatrix.models import Product, Testcases, Testmatrix, Status
def get_products(request):
tm = list(Testmatrix.objects.filter(productid='abc'))
return render_to_response('products.html', {'tm': tm})
разработан на данный момент минимальным, чтобы помочь сосредоточиться на реальной проблеме в(views / model).
Template: (products.html)
{% extends "main.html" %}
{% block body %}
<table>
{% for tm in tm %}
<tr>
<td>{{ tm.testmatrixid }}</td>
<td>{{ tm.testcaseid.testcasename }}</td>
</tr>
{% endfor %}
</table>
{% endblock %}
Проблема:
Хотя я могу присоединиться к моделям Testmatrix и Testcase, я не могу создать эквивалентный набор запросов, объединив всеTestMatrix, TestCase, Записи о статусе, скажем, на произвово всех трех моделях (testmatrixid, productid, productname, testcaseid, testcasename).Однако я не уверен, как расширить этот автоматический внешний ключ, ссылающийся на модель состояния.Это было бы проще, если бы все внешние ключи были определены в самой Testmatrix.Но у Status есть внешний ключ для TestMatrix.
2) Я пытался использовать что-то вроде: records = Status.objects.filter (testmatrixid__productid = pid).Это снова дало мне набор запросов в результате присоединения к Testmatrix и Status, но не к Testcases.
Извините за любые грубые ошибки или ошибки.Это мой самый первый пост!