2008-11-20 3 views
2

Вот мой код:Джанго внешнего ключа доступа в функции сохранения()

class Publisher(models.Model): 
    name = models.CharField(
      max_length = 200, 
      unique = True, 
    ) 

    url = models.URLField() 

    def __unicode__(self): 
     return self.name 

    def save(self): 
     pass 

class Item(models.Model): 
    publisher = models.ForeignKey(Publisher) 

    name = models.CharField(
      max_length = 200, 
    ) 

    code = models.CharField(
      max_length = 10, 
    ) 

    def __unicode__(self): 
     return self.name

Я хочу, чтобы иметь возможность получить доступ к каждому пункту из издателе сохранения функции. Как я могу это сделать?

Например, я хотел бы добавить текст в поле «код» каждого элемента, связанного с этим издателем, в хранилище Publisher.

Редактировать: Когда я пытаюсь реализовать первое решение, я получаю сообщение об ошибке «Объект« Publisher »не имеет атрибута« item_set ». По-видимому, я не могу получить к нему доступ. Любые другие подсказки?

Редактировать 2: Я обнаружил, что проблема заключается в том, что при создании нового объекта Publisher я добавляю элементы inline. Поэтому при попытке сохранить издателя и доступа к элементам они не существуют.

Есть ли способ обойти это ?!

ответ

8

Вы должны быть в состоянии сделать что-то вроде следующего:

def save(self, **kwargs): 
    super(Publisher, self).save(**kwargs) 

    for item in self.item_set.all(): 
     item.code = "%s - whatever" % item.code 

мне не очень нравится то, что вы здесь делаете, это не является хорошим способом связать Item с Publisher. Что вы в конце концов?

+0

ooh, это немой. отношение внешнего ключа относится к этому элементу! я извиняюсь. Я редактирую, чтобы отразить правильный код! – blackrobot 2008-11-20 22:30:24

Смежные вопросы