저는 최근 10 년 전에 작성된 고풍 웹 응용 프로그램을 마이그레이션하기 위해 Django를 평가하기 시작했습니다.외장 키를 사용하여 Django 3 자 조인
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})
템플릿 (보기/모델)의 실제 문제에 초점을 돕기 위해이 시점에서 최소화하도록 설계)이 시점에서 수정하지 않으려는 것입니다.
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 및 테스트 케이스 모델을 가입 할 수 있어요하지만
, 내가 말 제품 ID = 'ABC에 TestMatrix, TestCase에, 상태 기록을 모두 결합하여 등가의 검색어를 생성 할 수 없습니다입니다
1) 사용이 Testmatrix 및 테스트 케이스 및 제품 테이블 간의 select_related 모든 세 가지 모델에서 속성에 액세스 할 수 있었다 (testmatrixi : '
나는 다음과 같은 시도 d, productid, productname, testcaseid, testcasename). 그러나이 자동 외래 키 상태 모델을 참조하는 확장하는 방법을 잘 모르겠습니다. 모든 외부 키가 Testmatrix 자체 내에서 정의 되었다면 더 쉬울 것입니다. 그러나 Status에는 TestMatrix에 대한 외래 키가 있습니다.
2) 항목 = Status.objects.filter (testmatrixid__productid = pid)와 같은 것을 사용해 보았습니다. 이것은 Testmatrix와 Status에 합류 한 결과로 queryset을 다시 주었지만 Testcases는 반환하지 않았습니다.
눈부신 실수 나 불쾌감을 용서하십시오. 이것은 나의 첫 번째 게시물입니다!
감사합니다. 이 작동합니다. 나는 마지막 마일을 놓쳤다 : reverse foreign key looks를위한 "related_name". – rajivRaja