Как я могу изменить свой запрос для работы в Django? - PullRequest
0 голосов
/ 25 октября 2019

Я хочу сделать запрос из двух таблиц одновременно, я зарегистрировал зависимости в своем классе. Но запрос не работает для меня. Что с ним не так?

views.py

def payments(request):
     paymentsss = Transaction.objects.select_related("currency_id")[:5]
     return render(request, "payments.html", {"paymentsss": paymentsss})

models.py

class Transaction(models.Model):
    id = models.BigIntegerField(blank=True, null=False, primary_key=True)
    currency_id = models.ForeignKey(Currency, null=True, on_delete=models.CASCADE)
    deal_id = models.ForeignKey(Deal, null=True, related_name='deal', on_delete=models.CASCADE)
    service_instance_id = models.ForeignKey(ServiceInstance, null=True, related_name='service_instance', on_delete=models.CASCADE)
    payment_source_id = models.ForeignKey(PayerPaymentSource, null=True, related_name='payment_source', on_delete=models.CASCADE)
    payment_date = models.DateTimeField(blank=True, null=True)
    amount = models.IntegerField(blank=True, null=True)
    status = models.CharField(max_length=255, blank=True, null=True)
    context = models.TextField(blank=True, null=True)  # This field type is a guess.

    class Meta:
        managed = False
        db_table = '"processing"."transaction"'`enter code here`

И валюта, например:

class Currency(models.Model):
id = models.SmallIntegerField(blank=True, null=False, primary_key=True)
name = models.CharField(max_length=128, blank=True, null=True)
iso_name = models.CharField(max_length=3, blank=True, null=True)
minor_unit = models.SmallIntegerField(blank=True, null=True)

class Meta:
    managed = False
    db_table = '"processing"."currency"'

Моя ошибка: enter image description here

Я был бы рад, если есть пример того, как сделать больший запрос. Из 3-4 таблиц.

Ответы [ 2 ]

3 голосов
/ 25 октября 2019

Изменить db_table

class Meta:
    managed = False
    db_table = 'processing.transaction'

class Meta:
    managed = False
    db_table = 'processing.currency'
0 голосов
/ 25 октября 2019

Вам необходимо изменить имена столбцов для внешних ключей: например, currency = ForeignKey(...) и deal = ForeignKey(...).

Поле является ссылкой на сам объект , а не на id объекта. Вы можете заметить, что за кулисами Django запрашивает currency_id_id, что не имеет смысла.

Если имя вашего столбца currency_id (в вашей базе данных), тогда имя вашего поля должно быть currency.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...