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)
Zostaw komentarz