Как напечатать отношение модели Foreignkey? - PullRequest
0 голосов
/ 10 января 2020

Если в Моей модели, Moneybook есть много денежных журналов.

, поэтому я проектирую модель

Moneybook / models.py

   name = models.CharField(max_length=30, default="행복한 여행!")
    owner = models.ForeignKey(
        user_models.User, on_delete=models.CASCADE, related_name="owner")
    companion = models.ManyToManyField(
        user_models.User, related_name="companion", blank=True)
    country = CountryField()
    location = models.CharField(max_length=50, blank=True)
    start_date = models.DateTimeField(default=NOW)
    end_date = models.DateTimeField(default=NOW)

Moneylog / models. py

moneybook = models.ForeignKey(
    moneybook_models.Moneybook, on_delete=models.CASCADE, related_name="moneybooks")
payer = models.ForeignKey(
    user_models.User, on_delete=models.CASCADE, related_name="payer")
dutch_payer = models.ManyToManyField(
    user_models.User, related_name="dutch_payer")
price = models.IntegerField()
category = models.CharField(max_length=10)
memo = models.TextField()

Если я хочу загрузить все денежные логи в каждой принадлежащей денежной книге. как я могу загрузить его?

Я думаю ...

def moneybook_detail(request, pk):
    moneylogs=moneylog.filter(moneylog.moneybook.id=request.moneybook.id)
    return render(request, "moneybooks/detail.html")

, но произошла ошибка.

moneylogs = moneylog.filter(request.moneybook.id=request.moneybook.id)
SyntaxError: keyword can't be an expression

Ответы [ 2 ]

2 голосов
/ 10 января 2020

Вы можете запросить таблицу Moneylog с помощью следующего запроса, используя двойное подчеркивание __ для фильтрации по полям ссылочных объектов.

moneylogs = MoneyLog.filter(moneybook__id=<<<MoneyBookID_GOES_HERE>>>)

Или используя внутренний ReverseManyToOneManager в Django

просто с помощью

moneybook = MoneyBook.objects.get(pk=<<<<MoneyBookID_GOES_HERE>>>>)
moneylogs = moneybook.moneylog_set.all() # all() to get all money logs
# You can do filter(...) on it too to filter the moneylogs too.

будут возвращены все журналы денег, связанные с денежной книгой.

1 голос
/ 10 января 2020

Как правило, вы должны использовать двойное подчеркивание __ для ссылки на столбцы внешнего ключа в фильтрах:

def moneybook_detail(request, pk):
    moneylogs=moneylog.filter(moneybook__id=request.moneybook.id)
    return render(request, "moneybooks/detail.html")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...