0

こんにちは、データベースにいくつかのフィールドを設定する方法について質問したいと思います。私は3つのモデルを持っています

モデル

class Customer(models.Model):
    #fields


class Entry(models.Model):
    #fields
    customer = models.ForeignKey(Customer, related_name='entries')


class EntryHistory(models.Model):
    #fields
    entry = models.OneToOne(Entry, related_name='history')

特定の顧客のすべてのエントリ履歴を取得したいと考えています。そうじゃないですか

for entry in customer.entries:
    try:
        history.append(entry.history)
    except entry.history.related.models.DoesNotExist:
        pass(or continue?)

私の考えでは、すべての顧客のエントリを検索し、リストに履歴が追加されているかどうかを調べます。EntryHistory に顧客フィールドを追加したほうがよいでしょうか?クエリはより速くなりますか? これは、私のプロジェクトでは頻繁に行われるトランザクションです。しかし、 EntryHistory モデルに顧客を追加することは冗長であることを知っています。なぜなら、入力フィールドから顧客が誰であるかを知っているからです。たとえば、顧客が多く、それぞれに多くのエントリがある場合、心配する必要がありますか?

4

1 に答える 1

2

特定の顧客のすべてのエントリ履歴を取得したいと考えています。

customer = Customer.objects.get(pk=1)
EntryHistory.objects.filter(entry__customer=customer)

Django は外部キーの正引きと逆引きの両方のルックアップを提供するため、 EntryHistory -> Entry -> Customer から移動できることを悪用します。

于 2013-11-06T07:16:48.777 に答える