Django: публикация внешних ключей приводит к тому, что соответствующий запрос не существует - PullRequest
0 голосов
/ 30 августа 2018

Модель:

class CompanyList(models.Model):
    company_id = models.CharField(max_length=10, unique=True)
    company_name = models.CharField(max_length=100, unique=True)


class Reporting(models.Model):
    company = models.ForeignKey(CompanyList, on_delete=models.CASCADE)
    year_end = models.DateField()


class CompanyAccountsExtracts(models.Model):
    reporting = models.ForeignKey(Reporting, on_delete=models.CASCADE)
    data_type = models.CharField(max_length=30)
    source = models.CharField(max_length=30)
    value = models.CharField(max_length=30)

Теперь у меня есть файл данных pandas (company_accounts_extracts_upload) для записи в CompanyAccountsExtracts. Я использую следующий код для этого:

for i, row in enumerate(company_accounts_extracts_upload.values):

    single_row = company_accounts_extracts_upload.iloc[i].to_dict()

    report = models.Reporting.objects.get(company=single_row['Company ID Number'], year_end=single_row['Year End'])

    DataExtract = models.CompanyAccountsExtracts(reporting=report,
                                             data_type=single_row['DataType'],
                                             source=single_row['Source'],
                                             value=single_row['Value'],
                                             )
DataExtract.save()

В строке «report = models.Reporting ...» появляется следующая ошибка:

DoesNotExist: Reporting matching query does not exist.

Однако я на 100% уверен, что компания и конец года существуют, как я вижу это в представлении администратора.

Я думаю, что ошибка может быть связана с тем, как я отправляю внешний ключ в качестве внешнего ключа создания отчетов, который снова является внешним ключом из CompanyList?

1 Ответ

0 голосов
/ 30 августа 2018

Вам необходимо обновить company query param с:

company=['Company ID Number']

до:

company__company_id=['Company ID Number']

Вы получаете ошибку, потому что параметру company понадобится Company instance, а вы используете только поле company_id.

...