У меня есть набор моделей для заполнения модели расписания.
Модель
class Timetable(models.Model):
day = models.ForeignKey('Day',on_delete=models.CASCADE)
start = models.IntegerField()
end = models.IntegerField()
period = models.CharField(max_length=12)
classteacher = models.ForeignKey('Class_teacher',on_delete=models.SET_NULL)
class Class_teacher(models.Model):
first_name = models.CharField(max_length=200)
last_name = models.CharField(max_length=200)
empid = models.CharField(max_length=10)
email = models.CharField(max_length=30)
Просмотры
class Timetableadding(CreateView):
model = Timetable
success_url = '/dashboard'
form_class = Timetableform
template_name = 'newtest.html'
def get_context_data(self, **kwargs):
context = super(Timetableadding, self).get_context_data(**kwargs)
context['formset'] = TimetableFormSet(queryset=Timetable.objects.none())
return context
def post(self, request, *args, **kwargs):
formset = TimetableFormSet(request.POST)
if formset.is_valid():
return self.form_valid(formset)
def form_valid(self, formset):
formset.classteacher = get_object_or_404(Class_teacher, email=self.request.user.email)
formset.save()
# return super().form_valid(formset)
return HttpResponseRedirect('/dashboard')
Формы
class Timetableform(ModelForm):
class Meta:
model = Timetable
fields = ( 'start', 'end', 'period')
TimetableFormSet = modelformset_factory(Timetable, fields=('start', 'end', 'period'),extra=8,)
Template
<form class="form-material m-t-40 floating-labels" method="post" enctype="multipart/form-data">
{% csrf_token %}
{{ formset.management_form }}
{% for form in formset %}
{{ form }}<br><br>
{% endfor %}
<div class="form-group row">
<button type="submit" class="btn waves-effect waves-light btn-rounded btn-success">
Submit
</button>
</div>
</form>
При заполнении формы расписания с использованием представления createview поля start end period
в Timetable
модели выполняются как общая форма.
Требования
- В веб-приложении есть функция входа в систему. Когда пользователь (classteacher) авторизуется, он может добавить расписание. То, что я хочу, это то, чтобы поле classteacher в Timetable (модель Form) было автоматически установлено как пользователь, который является учителем класса. (Classteacher) и должны быть сохранены в БД после создания расписания. Модель Classteacher обновлена соответствующими полями.
Я пытался передать классного учителя в formset, но он был выполнен так, как мне нужно
Я знаю, как это сделать в обычной форме, но я не делал этого в форме.
- Поле дня в
Timetable
должно быть выбрано только один раз, поэтому будет предоставлено 8 форм для start
end
и period
, но должна быть только одна форма для day
. Мне удалось получить 8 форм для start
end
и period
, но я не знал о day
.