Простой пример из django_tutorial:
class AuthorCreate(CreateView):
model = Author
fields = ['name']
def form_valid(self, form):
form.instance.created_by = self.request.user
return super(AuthorCreate, self).form_valid(form)
С Супер и линеаризацией разобрался, но не разобрался походу с тем, что должны возвращать функции...
Так, вот, что в данном случае функция возвращает? Как по мне это вызов этой же функции, но это кажется мне непонятным...
_________________________________________________________________________________________________________________
И сразу еще вопрос, можно ли закончить это так, что бы передать id сохраненного поля формы далее ( в данном случае это будет поле question_text), на следующую страницу с формой для создания и привязывания по этому id списка вопроссов?) Как вытащить с формы id сохраненной модели?
models:
class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField(default=datetime.datetime.now())
class Choice(models.Model):
question = models.ForeignKey(Question)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
view:
class QuestionCreate(LoginRequiredMixin, CreateView):
template_name = "polls/create_question.html"
model = Question
fields = ['question_text']
#success_url = reverse_lazy('create_choices')
def form_invalid(self, form):
pass
def form_valid(self, form):
# Код сохраннеия модели
# Какой-то return
#или нижнюю функцию тоже сделать классом и наследовать от CreateView?
def create_choices(request, question_id):
form = ChoiceForm()
try:
question = Question.objects.get(pk = question_id)
except Question.DoesNotExist:
raise Http404
return render(request, "polls/create_choices.html", {"form": form, "question": question})
urls:
url(r'create/$', views.QuestionCreate.as_view(), name='create_question'),
url(r'create/(?P<question_id>\d+)/$', views.create_choices, name='create_choices'),
forms.py
class QuestionForm(forms.ModelForm):
class Meta:
model = Question
fields = ('question_text',)
extra = 1
class ChoiceForm(forms.ModelForm):
class Meta:
model = Choice
fields = ('choice_text',)
extra = 6
#В темплейте 6 полей choice_text не выводит, только одно, с формой явно что то не так
В результате первая форма должна сохранять название вопросса, и с этим вопроссом идти на вторую форму с добавлением вариантов ответов и при заполнении добавить связаный id в таблицу Choice и варианты ответов... c formset не разобрался, решил так попробовать, а потом сделать все в аяксе на одной странице(это же возможно?_)