Можете ли вы / должны ли вы изменить объекты в базе данных в модели других классов - PullRequest
1 голос
/ 16 января 2010

Я хочу выполнить некоторые delete() и некоторые save() методы для некоторых объектов, которые не являются экземплярами текущего класса, в котором я сейчас нахожусь. Я пытаюсь сделать это в перегруженном save() методе учебный класс. Вот сценарий:

class Item(models.Model):
    name = models.CharField(max_length=500)
    category = models.ForeignKey(Category, null=True, related_name='add_item')
    tag = models.ManyToManyField(Category, null=True, related_name='tag_item')

    def save(self, *args, **kwargs):
        super(Item, self).save(*args, **kwargs)
        for a_tag in self.tag.all():
            #do stuff here
            a_tag.delete()
        cat = self.category
        while cat is not None:
            cat.add_item.add(self)
            #do stuff here
            cat.save()
            cat = cat.parent

Это не работает, и когда я пытаюсь это сделать, я получаю следующее исключение:

Exception AttributeError: "'Cursor' object has no attribute 'connection'" in <bound method Cursor.__del__ of <MySQLdb.cursors.Cursor object at 0x905c3ac>> ignored

Ответы [ 2 ]

0 голосов
/ 17 января 2010

Я решил эту проблему. На самом деле вы можете выполнить то, что я пытался сделать. Проблема была в том, что я использовал менеджеров совершенно неправильно. a_tag выше на самом деле было ссылкой на объект Category, поэтому вызов delete() для этого фактически удалял мои категории, поэтому я получаю странное исключение, которое я предполагаю. Вот фрагмент кода новой рабочей модели кода:

def save(self, *args, **kwargs):
    super(Item, self).save(*args, **kwargs)
    for a_tag in self.tag.all():
        a_tag.tag_item.clear()
    cat = self.category
    while cat is not None:
        cat.tag_item.add(self)
        cat = cat.parent
0 голосов
/ 16 января 2010

Я заметил, что вы пытаетесь обновить ManyToMany в вашем save (). Вы можете взглянуть на мой ответ на эту ветку и посмотреть, относится ли это к вашей ситуации. Если вы используете интерфейс администратора и столкнулись с этой ошибкой, то это почти наверняка является частью вашей проблемы. Вы также можете посмотреть на упомянутый MonkeyPatch.

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