Определить поле, принадлежащее Django многие ко многим ссылка - PullRequest
0 голосов
/ 12 февраля 2012

У меня есть 4 гипотетических модели:

class Basea(models.Model):
    name = models.CharField("Name", max_length=30)
    type = models.ManyToManyField('Type', blank=True, related_name='types', db_table=u'test_basea_type')

class Baseb(models.Model):
    name = models.CharField("Name", max_length=30)
    type = models.ManyToManyField('Type', blank=True, related_name='types', db_table=u'test_baseb_type')

class Basec(models.Model):
    name = models.CharField("Name", max_length=30)
    type = models.ManyToManyField('Type', blank=True, related_name='types', db_table=u'test_basec_type')

class Type(models.Model):
    name = models.CharField("Name", max_length=30, unique=True)
    baseas = ManyToManyField_NoSyncdb(Basea, blank=True, related_name='type_baseas',  db_table=u'test_basea_type')
    basebs = ManyToManyField_NoSyncdb(Baseb, blank=True, related_name='type_basebs',  db_table=u'test_baseb_type')
    basecs = ManyToManyField_NoSyncdb(Basec, blank=True, related_name='type_basecs',  db_table=u'test_basec_type')

Я создаю новый тип и хочу прикрепить ссылку «многие ко многим» после сохранения нового объекта «Тип».На мой взгляд, это прекрасно работает:

if form.is_valid(): # All validation rules pass
    new_obj = form.save(commit=False)
    # Do some stuff 
    new_obj.save()
    new_obj.baseas.add(link_object.id) #link_object pulled earlier in the code

Так что у меня будет link_object, который будет либо Basea, Baseb, либо Basec.Какой код можно использовать для изменения последней строки:

    new_obj.baseas.add(link_object.id) 

, чтобы поле соответствовало правильному типу объекта?Поэтому, если link_object был из Baseb, код должен выполнять функцию:

    new_obj.basebs.add(link_object.id) 

Как это имя поля можно определить более обобщенно?

1 Ответ

0 голосов
/ 12 февраля 2012

Я думаю, что вы ищете GenericForeignKey .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...