2013-10-03 4 views
0

У меня есть две модели Django следующим образом:Джанго: обновление сразу две модели

class Skill(models.Model): 
    title = models.CharField(max_length=255) 

    def __unicode__(self): 
     return self.title 


class UserSkills(models.Model): 
    user = models.ForeignKey(User) 
    skill = models.ManyToManyField(Skill) 

    def __unicode__(self): 
     return '%s | %s' % (self.user, self.skill) 

Теперь у меня есть списки навыков, связанных с пользователем, который я хочу, чтобы одновременно обновить модель навыков и связанных с ними навыков Пользователя , Что-то вроде:

# cleaned_skills[] is list if unicode strings 

for skill in cleaned_skills: 
    s, created = Skill.objects.get_or_create(title=skill) 
    s.save() 
    u, created = UserSkills.objects.get_or_create(skill=s, user=request.user) 
    u.save() 

По какой-то причине это мне не подходит. Есть ли способ, которым я должен одновременно обновлять модели Skill и User?

+0

вы должны использовать сигнал 'post_save' на модели' Skill' для создания объекта 'UserSkills' – karthikr

+0

Ok. Это имеет смысл, хотя я признаю, что не очень хорошо знаком с сигналами. –

+0

Имеется много доступной справки. Особенно на SO. Вы должны быть в порядке – karthikr

ответ

1

Лично я думаю, что вы делаете это правильно.

+0

Вы, значит, это в представлении? –

+0

@ DarwinTech Да. Если вы делаете это несколько раз в нескольких представлениях, я бы поместил код в Менеджер. Взгляните на http://www.djangobook.com/en/2.0/chapter10.html#adding-extra-manager-methods и https://docs.djangoproject.com/en/dev/topics/db/managers/. , –

+0

Спасибо, очень полезно! –

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