Если вы определяете fieldname
, то есть ForeignKey
, Django автоматически добавляет дополнительное поле fieldname_id
, которое содержит первичный ключ этого объекта.Итак, здесь Django построил testcase_id_id
, который содержит первичный ключ экземпляра Testcases
, на который он ссылается, но это делает его семантически довольно " некрасивым ".
более логично называть отношение после элемента, на который оно ссылается, и позволить Django сгенерировать fieldname_id
, так что вы все равно сможете извлечь (и запросить) это значение.
Таким образом, минимальное исправление:
class Executedtests(models.Model):
# rename the relations (drop the _id suffix)
<b>testcase</b> = models.ForeignKey("testcases", models.CASCADE)
<b>testrun</b> = models.ForeignKey("testruns", models.CASCADE)
teststart = models.TimeField(blank=True, null=True) # This field type is a guess.
testend = models.TimeField(blank=True, null=True) # This field type is a guess.
def __str__(self):
tc = Testcases.objects.get(pk=self.testcase_id)
tr = Testruns.objects.get(pk=self.testrun_id)
return f"{tc}(tr), Start: {self.teststart}, End: {self.testend}"
Ваше представление будет тогда работать, поскольку testcase_id
больше не будет содержать экземпляр Testcases
(внешний ключ принимает тип модели, на которую вы ссылаетесь), а первичный ключ.
Вызывая someexecutedtests.testcase
, вы, таким образом, не получаете первичный ключ этого testcase
, а сам экземпляр Testcases
(в случае, если он еще не был получен, Django обычно выполняет другой запрос).