私は自分の仕事のプロジェクトのためにimdbのようなアプリを書こうとしています。このアプリでは、8700のimdbムービーと、約40kの監督と俳優/女優をmysqlデータベースに保存する必要があります。
新しい映画を投稿しようとしたとき、映画作成ページのレンダリングに長い時間(約20秒)かかりました。
最初に、人の名前、性別、「is_director」および「is_actor」ブールフィールドを持つ「persons」という名前のモデルを作成しました。
次に、is_directorとis_actorの人用に2つのManyToManyFieldsを使用して「movies」という名前のモデルを作成しました。
その後、djangoフィクスチャを使用して約4万人をデータベースにインポートしました。私の問題はここから始まりました。django adminから新しいムービーを投稿しようとしたとき、ムービー作成ページのレンダリングに長い時間(約10秒)がかかりました。これは大量の人のデータ用であることを私は知っています。djangoの組み込みオートコンプリートを使用しましたが、問題はまだありました。
Python / Djangoは初めてです。だから私はこれを間違った方法でやっていると思います。データベース構造が間違っているか、モデルに問題がある可能性があります。解決方法がわかりません。
# Person Model:
class Person(models.Model):
name = models.CharField(_('Person Name'), max_length=100)
is_actor = models.BooleanField(_('is actor'), default=True)
is_director = models.BooleanField(_('is director'), default=False)
MALE = 'male'
FEMALE = 'female'
PERSON_GENDER = [(MALE, _('Male')), (FEMALE, _('Female'))]
gender = models.CharField(
_('Gender'),
max_length=6,
choices=PERSON_GENDER,
default=MALE
)
# Movies Model:
class Movies(models.Model):
title = models.CharField(_('Movie Name'), max_length=250)
genre = models.ManyToManyField(Genre, verbose_name=_('genre'))
director = models.ManyToManyField(
Person, verbose_name=_('director'), related_name=_('director'),limit_choices_to={'is_director': True},blank=True)
actors = models.ManyToManyField(
Person, verbose_name=_('actors'), related_name=_('actors'),limit_choices_to={'is_actor': True},blank=True)
1-私のコードに問題はありますか?
2-私はこれを間違った方法でやっていますか?
3-間違ったフレームワークを選択しましたか?
4-私はasp.netコアとlaravelに精通しています。この種のアプリを一緒に書く方がいいですか?言語は問題ありません、私はパフォーマンスだけが必要です。
あなたの管理ページには4万人のリストが2回含まれていると思います。管理者のディレクターフィールドとアクターフィールドにraw_id_fieldsを使用してみてください。
非常に長いリストについては、Djangoのドキュメントとこの記事を参照してください(ForeignKeyの例がありますが、ManyToManyFieldでも機能するはずです)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加