私は「多対多の一般的な関係」を作成する必要があると思います。Djangoの多対多の一般的な関係
私は2つの参加者の種類があります。これらの参加者は、2種類の異なる1つの以上の報酬持つことができます
class MemberParticipant(AbstractParticipant):
class Meta:
app_label = 'participants'
class FriendParticipant(AbstractParticipant):
"""
Abstract participant common information shared for all rewards.
"""
pass
を(報酬モデルは、他のアプリからです):
class SingleVoucherReward(AbstractReward):
"""
Single-use coupons are coupon codes that can only be used once
"""
pass
class MultiVoucherReward(AbstractReward):
"""
A multi-use coupon code is a coupon code that can be used unlimited times.
"""
だから今私が必要これらすべてをリンクする。これは私が関係(以下を参照)を創り出すことを考えていたからです。以下
提案リンクモデル:
class ParticipantReward(models.Model):
participant_content_type = models.ForeignKey(ContentType, editable=False,
related_name='%(app_label)s_%(class)s_as_participant',
)
participant_object_id = models.PositiveIntegerField()
participant = generic.GenericForeignKey('participant_content_type', 'participant_object_id')
reward_content_type = models.ForeignKey(ContentType, editable=False,
related_name='%(app_label)s_%(class)s_as_reward',
)
reward_object_id = models.PositiveIntegerField()
reward = generic.GenericForeignKey('reward_content_type', 'reward_object_id')
注:私は、Djangoの1.6
私は個人的に、ORMで得られた特別な機能のためにGenericForeignKeyではなくForeignKeyを使用することを好みます。 – schillingt
@schillingtご返信ありがとうございます。報酬はSingleVoucherRewardまたはMultiVoucherRewardのいずれかになり、参加者はMemberParticipantまたはFriendParticipantになります。これは、私が標準的なFKのために行った場合、私は4つのFKを必要とし、そのうちの2つは常に空白であることを意味するでしょう。これは私には悪いデータベース設計を叫ぶので、GenericForeignKeyがより理にかなっていると思いますが、私は提案にはオープンしています。私はあなたのコメントに興味があります "追加機能が得られました"あなたはGenericForeignKeyを使って何を失うのですか? – GrantU
これらのフィールドは、フィルタで使用することも、除外することもできません。 [docs](https://docs.djangoproject.com/en/dev/ref/contrib/contenttypes/#django.contrib.contenttypes.generic.GenericForeignKey)のこのセクションの最後に記載されています。 – schillingt