не удалось получить родительскую идентификационную запись для сохранения дополнительных записей при сохранении встроенных файлов - PullRequest
1 голос
/ 09 июля 2011
  • Я сохраняю проект.
  • Имеет встроенную модель Практика.
  • В режиме сохранения модели Practitioner я запускаю собственный код для вставки другой записи в другую таблицу с именем Simple Auth.

Я думал, что если я передам практикующему экземпляр проекта, как я делаю это в views.py, то сохранение после сохранения сможет ссылаться на проект себя.

Итак, мой views.py выглядит так:

def form_valid(self, form):
    practitioner_form = context['practitioner_form']
    if practitioner_form.is_valid():
        self.object = form.save(commit=False)
        self.object.slug = slugify(self.object.title)
        self.object.save()
        practitioner_form.instance = self.object
        practitioner_form.save()
        return HttpResponseRedirect(reverse('profile_detail', kwargs={'username':user.username}))
    else:
        return self.render_to_response(self.get_context_data(form=form)) 

Сохранение в режиме "Моя практика" выглядит следующим образом:

def save(self, *args, **kwargs):
    if SimpleAuth.objects.filter(project=self.project,name=self.practitioner_name).exists():
        simpleauth = SimpleAuth.objects.get(project=self.project,name=self.practitioner_name)
        simpleauth.project = self.project
        simpleauth.name = self.practitioner_name
        simpleauth.save()
    else:
        SimpleAuth.objects.create(project = self.project, name = self.practitioner_name)
    super(Practitioner, self).save(*args, **kwargs)

По некоторым причинам simpleauth.project = self.project , похоже, не имеет никакого значения. Почему я не могу получить такой идентификатор проекта?

Просто записка. Если я создаю свой проект через администратора, то все это работает. Это в моей форме, что это не работает.

1 Ответ

1 голос
/ 09 июля 2011

Не думаю, что это лучший способ, но пока он работает. Если никто не ответит более изящным способом, я отмечу это как ответ.

В сохранении def я добавил get_object_or_404.

def save(self, *args, **kwargs):
    project = get_object_or_404(Project, pk=self.project_id)
    if SimpleAuth.objects.filter(project=self.project,name=self.practitioner_name).exists():
        simpleauth = SimpleAuth.objects.get(project=project,name=self.practitioner_name)
        simpleauth.project = project
        simpleauth.name = self.practitioner_name
        simpleauth.save()
    else:
        SimpleAuth.objects.create(project = project, name = self.practitioner_name)
    super(Practitioner, self).save(*args, **kwargs)
...