Receive pk of an object in a CreateView Django

0

How can I get in a CreateView the pk of an object to assign it to another that has a ForeignKey field.

Model.py

class Manga(models.Model):
    author=models.ForeignKey(settings.AUTH_USER_MODEL)
    title = models.CharField(max_length = 100)
    description = models.TextField(max_length = 700)

Class Chapter(models.Model):
    manga = models.ForeignKey(Manga)
    owner = models.ForeignKey(settings.AUTH_USER_MODEL)
    content = models.FileField(upload_to=user_directory_path)

Views.py

class MangaAddView(LoginRequiredMixin, CreateView):
    login_url = '/login'
    model = Manga
    template_name = 'manageManga/manga_add.html'
    form_class = MangaRegistrationForm
    success_url = '/'

    def form_valid(self, form):
        form.instance.author = self.request.user
        self.object = form.save()
        return HttpResponseRedirect(self.get_success_url())

class ChapterAddView(LoginRequiredMixin, CreateView):
    login_url = '/login'
    model = Chapter
    template_name = 'manageManga/chapter_add.html'
    form_class = ChapterRegistrationForm
    success_url = '/'

    def form_valid(self, form):
        manga_id = # forma de obtener el id
        form.instance.manga = Manga.objects.filter(id=manga_id)
        form.instance.owner = self.request.user
        self.object = form.save()
        return HttpResponseRedirect(self.get_success_url())

urls.py

urlpatterns = [
    url(r'^mangas/add$', views.MangaAddView.as_view(), name = 'manga_add'),
    url(r'^mangas/(?P<manga_id>[0-9]+)/chapter/add$', views.ChapterAddView.as_view(), name = 'chapter_add'),#aqui es por donde quiero pasar la id o pk
]

The forms are nothing special, simply in them I omit the author fields of the model Manga and owner & sleeve of the model Chapter.

Thanks in advance.

    
asked by Felipe Martinez 12.11.2017 в 00:12
source

1 answer

0

It's very simple friend. For that point you have more than half a way traveled.

You can notice that django when you see that there are groups in the regular expressions of the urls, group them in a dictionary that then passes to the views, and you can find it in self.kwargs in whatever method of the class you use, in your case it would be like this:

def form_valid(self, form):
    manga_id = self.kwargs['manga_id']# forma de obtener el id
    form.instance.manga = Manga.objects.filter(id=manga_id)
    form.instance.owner = self.request.user
    self.object = form.save()
    return HttpResponseRedirect(self.get_success_url())

I hope I have helped you, any doubt comments

    
answered by 14.11.2017 в 20:47