LINUX.ORG.RU

[Django] автоматические создание внешних ключей


0

1

Существует модель для объектов следующего вида:

class FObject(models.Model):
    parent      = models.OneToOneField('self', null=True, blank=True, db_column='parent')
    object_type = models.ForeignKey(ObjectType)
    created     = models.DateTimeField(auto_now_add=True)
    
    def __unicode__(self):
        return str(self.id)
Типы объектов:
class ObjectType(models.Model):
    name        = models.CharField(max_length=32)
    table_name  = models.CharField(max_length=32)
    class_name  = models.CharField(max_length=32)
    
    def __unicode__(self):
        return self.name

И любой произвольный класс:

class SomeClass(models.Model):     
    object_id   = models.OneToOneField(FObject, primary_key=True, related_name='object_id', db_column='object_id')
    owner       = models.OneToOneField(FObject, related_name='owner', db_column='owner')    
    body        = models.TextField()

Есть ли способ автоматического создания записи FObject при создании записи SomeClass? Или способ как-нибудь подсунуть свой обработчик, который создаст нужную запись и вернет недостающие ключи, или что-то в этом духе?

p.s. Django я ковыряю последние несколько дней, поэтому не особо в курсе методов работы с этим фреймворком.

class CommonProperties(models.Model):
      a = models.CharField()
      b = models.PositiveIntegerField()
      c = models.BooleanField()


class SomeClass(CommonProperties):     
    d = models.DecimalField()
gistart ()

Учитывая, что FObject еще включает в себя ключ на ObjectType, да еще и родителя может иметь, то сложновато будет сделать для всех случаев.

Посмотри как сделано такое в админке - там можно кроме выбора из списка, добавить новый объект.

gruy ★★★★ ()
Ответ на: комментарий от gistart

Проверил, вроде бы работает как ожидается - в дочерней таблице создается fobject_ptr_id... Я тут еще подумал, что можно ведь перегрузить метод save().

В общем, спасибо.

division_hell ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.