есть интересный один здесь .. Я сократил модели, чтобы сделать его легче понять ..ManyToManyField сквозными на абстрактной модели
class Participant(Person):
passport_number = models.IntegerField(verbose_name=_('Passport Number'), db_column=u'PassportNumber')
class Meta:
db_table = u'Participant'
class Journey(BaseModel):
participants = models.ManyToManyField(Participant, related_name='%(app_label)s_%(class)s_participants', through=u'ParticipantJourney')
class Meta:
abstract = True
class PlaneJourney(Journey):
flight_number = models.CharField(max_length=16, verbose_name=_('Flight Number'), db_column=u'FlightNumber')
class Meta:
db_table = u'PlaneJourney'
class ParticipantJourney(BaseModel):
participant = models.ForeignKey(Participant, verbose_name=_('Participant'), db_column=u'ParticipantId')
journey_content_type = models.ForeignKey(ContentType, related_name='journey_content_type')
journey_object_id = models.PositiveIntegerField()
journey = generic.GenericForeignKey('journey_content_type', 'journey_object_id') # models.ForeignKey(Journey, verbose_name=_('Journey'), db_column=u'JourneyId')
payment_content_type = models.ForeignKey(ContentType, related_name='payment_content_type')
payment_object_id = models.PositiveIntegerField()
payment = generic.GenericForeignKey('payment_content_type', 'payment_object_id') # models.ForeignKey(Payment, verbose_name=_('Payment'), db_column=u'PaymentId')
class Meta:
db_table = u'ParticipantJourney'
Модель ParticipantJourney связывает участника путешествие, теперь путешествие абстрактно, потому что это может быть сделано любым количеством различных способов транспорта, каждый из которых будет иметь свои собственные поля. Я думаю, что эта установка является правильной, но я получаю следующее сообщение об ошибке:
Error: One or more models did not validate: kandersteg.planejourney: 'participants' is a manually-defined m2m relation through model ParticipantJourney, which does not have foreign keys to Participant and PlaneJourney
мне нужно держать вручную определение таблицы ссылок, поэтому я также могу связать платеж в указанном пути, так что я не очень знайте, куда идти дальше, если кто-то может пролить свет, я бы очень любезно!
Приветствия, Alex
Да, это работает, но побеждает объект, когда он имеет его как абстрактный :( –
Добавлена модель участника, она сильно уменьшена (ну и все модели), но вы получаете суть –
Я лично считаю, что это может быть ошибка в django, потому что я посмотрел на код, где это генерируется, и он, похоже, не учитывает поля GenericForeignKey, когда он искал два ForeignKeys, чтобы составить ManyToMany –