シャツを何枚か持っている人がたくさんいる状況を考えてみましょう。
class Person(models.Model):
name = models.CharField()
class Shirt(models.Model):
description = models.CharField()
owner = models.ForeignKey(Person)
私は彼らのシャツを着た彼らのポートレート写真を撮ります:
class Photo(models.Model):
person = models.ForeignKey(Person)
shirt = models.ForeignKey(Shirt)
テンプレートでは、次のようなものを使用します
{{ the_photo.shirt.description }}
と
{% for shirt in the_person.shirt_set.all %}
{{ shirt.description }}
{% endfor %}
モデルの在庫から写真用のシャツを選ぶためのフォームもあります。
今、ひねり!上半身裸でも撮れます!そのため、彼らが所有する可能性のあるシャツに加えて、エントリthe_person.shirt_set
も含めたいと思います. description='topless'
一人一人に追加のシャツを保管したくない'topless'
し、このオプションを追加するために各フォームとリストを変更する必要もありません.
Topless
クラスを作成するというアイデアがありました:
class Topless(Shirt):
def __init__(self, *args, **kwargs):
super(Topless, self).__init__(*args, **kwargs)
self.description = 'Topless'
そしてそれをリストに追加します:
class Person(models.Model):
name = models.CharField()
def shirts(self):
l = list(Shirt.objects.filter(owner=self))
l.insert(0, Topless())
return l
(そしてもちろんテンプレートでからthe_person.shirt_set
に切り替えます)、しかしid が None (または 0) であるため見苦しくなっており、それに対応するには多くの見苦しいハックが必要になるようです。the_person.shirts
the_photo.shirt
でも、もしかしたら私のやり方が悪いのでしょうか?何か案は?それを行うための最もエレガントでpythonicな方法は何ですか?