Я думаю, мне нужно создать "много-ко многим родовым отношениям".
У меня есть два типа участников:
class MemberParticipant(AbstractParticipant):
class Meta:
app_label = 'participants'
class FriendParticipant(AbstractParticipant):
"""
Abstract participant common information shared for all rewards.
"""
pass
Эти участники могут иметь 1 или более вознаграждений 2 разных видов (модель вознаграждений из другого приложения):
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