Dodanie klucza obcego przy zapisie formy w Django

Tworząc aplikacje w django, często stajemy przed potrzebą uzupełnienia pewnych pól modelu, przy zapisie danych z formularza. Dla przykładu wyobraźmy sobie sytuację, że zalogowani użytkownicy naszego serwisu mają możliwość dodawania krótkich notatek za pomocą formularza. Formularz składa się wyłącznie z pól określających Tytuł i Treść, a w modelu występują dodatkowo obowiązkowe pole, określające autora notatki.

#models.py
from django.contrib.auth import get_user_model
from django.db import models

UserModel = get_user_model()


class Note(models.Model):
    title = models.CharField(max_length=128)
    content = models.TextField()
    owner = models.ForeignKey(UserModel,
                              on_delete=models.CASCADE)
    saved = models.DateTimeField(auto_now_add=True, null=True)
#forms.py
from django import forms

from .models import Note


class NoteForm(forms.ModelForm):

    class Meta:
        model = Note
        fields = ['title', 'content']
#views.py
from django.views import generic

from . import forms


class NoteCreateView(generic.CreateView):
    form_class = forms.NoteForm
    template_name = 'note_form.html'
    success_url = reverse_lazy('todo:note_created')

    def post(self, *args, **kwargs):
        self.object = None
        form = self.get_form()
        if form.is_valid():
            self.object = form.save(commit=False)
            self.object.owner = self.request.user
            self.object.save()
            return HttpResponseRedirect(self.get_success_url())
        else:
            return self.form_invalid(form)

Ostatnia aktualizacja:

Zostaw komentarz