ゲームエンティティがあり、それぞれに1つ以上のプラットフォームがあります。また、各ゲームは、関連するゲームへのリンクを1つ以上持つことができます(独自のプラットフォームを使用)。私はfilter_horizontal =( "related_gamesを拡張する必要がありDjangoの多対多フィールドの関連オブジェクトをカスタマイズします
@admin.register(Game)
class GameAdmin(AdminImageMixin, reversion.VersionAdmin):
list_display = ("created", "name", "get_platforms"...)
list_filter = ("platforms", "year",)
#I'm interested in changing the field below
filter_horizontal = ("related_games",)
formfield_overrides = {
models.ManyToManyField: {"widget": CheckboxSelectMultiple},
}
def get_platforms(self, obj):
return ", ".join([p.name for p in obj.platforms.all()])
:admin.pyにこのコードを提供しています
class Game(TimeStampedModel):
gid = models.CharField(max_length=38, blank=True, null=True)
name = models.CharField(max_length=512)
platforms = models.ManyToManyField(
Platform, blank=True, null=True)
...
#here is the self-referencing m2m field
related_games = models.ManyToManyField(
"self", related_name="related", blank=True)
そして、このモデル:ここでは、models.pyでのように見えます"、) admin.pyの一部 - 関連ゲームウィジェットの各ゲームのプラットフォーム情報を追加します。 「(PS4、PSP、PS3)」のように表示されます(ゲーム名とプラットフォームのリスト)。
アプリケーションは、Djangoの1.7とPython 2.7
を使用するには、ご清聴ありがとうございました。 filter_horizontal
の各項目に記載されたものをデフォルトで
そして、このような機能が管理者だけに必要で、水平フィルタウィジェットにしか関係ない場合はどうなりますか?私はこのプロジェクトが初めてで、__unicode__の部分を変更するといくつかの問題が壊れる可能性があるとします。 –
確かに簡潔ではないが、__unicode__をオーバーライドする代わりに代替案を含める答えを編集した。 – ProfSmiles
__unicode__の最初の変種はうまく動作する。 joinメソッドの必要な文字列を除いて、オブジェクトを除く。だから私はこれをこうしました: '' .join([self.platforms.all()のpのためのunicode(p)]) –