Проблемы с извлечением данных из базы данных django и их тестированием
Очень извиняюсь, но я полный новичок в Django и Python. Я пытаюсь вытащить некоторые данные из базы данных, чтобы я мог утверждать против него в фазе тестирования, но у меня проблемы с пониманием того, как получить данные из модели. Любая помощь будет оценена по достоинству.
Мой код:
Models.py
class CurrentAccountState(AccountState):
enable_personal_profile = models.BooleanField(default=False)
class CurrentAccountSetting(TimestampedModel):
ACCOUNT_SEND_TO_OPTIONS = (
("buyer", _("Receipt sent to the buyer")),
("payment_profile_contact", _("Receipt sent to payment profile contact")),
)
account_state = models.ForeignKey(
CurrentAccountState, related_name="account_settings", on_delete=models.CASCADE
)
payment_profile_id = models.CharField(max_length=36)
send_to = models.CharField(max_length=32, choices=SEND_TO_OPTIONS, default="buyer")
views.py
@action(detail=True, methods=["post"])
def update_state(self, request, pk=None):
integration = AccountServiceManager.get_by_name(str(pk))
if not account:
raise Http404()
return Response("", status=status.HTTP_200_OK)
test update_state.py
def test_update_state(self):
user = self.admin_user
self.client.force_login(user)
account = AccountFactory(
name="account name", enabled=True, provider=str_to_kebab_case("account name")
)
payload = {
"enable_personal_profile": True,
"payment_profile_settings": [
{
"payment_profile_id": "Something",
"send_to": "buyer",
},
{
"payment_profile_id": "Something else",
"send_to": "payment_profile_contact",
}
]
}
response = self.client.post(f"{self.url}/account/update_state", data=json.dumps(payload), content_type="application/json")
assert response.status_code == status.HTTP_200_OK
account_account = CurrentAccountSetting.objects.all()
assert len(account_account) == 1
assert account_account.enable_personal_payment_profile is True
Я не могу понять, как я могу извлечь данные из реальной базы данных, чтобы я мог сделать утверждения в тесте. В настоящее время len(account_account) терпит неудачу, говоря, что у меня пустой массив, полученный из queryset[]. Что имеет смысл, поскольку я еще ничего не добавил в представления. Но как я могу на самом деле получить эти данные в представлениях?
Предположим, что AccountFactory создает для вас объект CurrentAccountSetting:
Возможно, это потому, что вы не запустили account.save() после строки 4 в test_update_state(). Или вы могли бы использовать create().
Если нет, то проблема в том, что вы не создали объект CurrentAccountSetting нигде в этом потоке.
Также в вашей последней строке кода вы, вероятно, хотите получить элемент из массива!
assert account_account[0].enable_personal_payment_profile