Этот вопрос и ответ помогли мне пройти 90% пути . Так что спасибо сообществу.
У меня есть набор моделей, который проверяет и переходит в цикл «если он действителен».
модели.py
class session_log(models.Model):
anaesthetist_id = models.ForeignKey('auth.User')
session_start_datetime = models.DateTimeField(blank=False)
session_end_datetime = models.DateTimeField(blank=False)
session_type= models.ForeignKey(session_types, null=True, blank=True)
session_comments=models.TextField(null=True, blank=True)
def __unicode__(self):
return str(self.anaesthetist_id)+" "+str(self.session_start_datetime.date())+" "+str(self.session_type)
формы.py
class SessionList(forms.ModelForm):
session_comments = forms.CharField(required=False, widget=forms.Textarea(attrs={'rows':1}))
session_start_datetime = forms.DateTimeField(input_formats=['%d/%m/%y %H:%M',], widget=forms.DateTimeInput(format="%d/%m/%y %H:%M"))
session_end_datetime = forms.DateTimeField(input_formats=['%d/%m/%y %H:%M',], widget=forms.DateTimeInput(format="%d/%m/%y %H:%M"))
class Meta:
model = session_log
exclude = ('anaesthetist_id',)
fields = ['session_start_datetime', 'session_end_datetime', 'session_comments','session_type']
просмотры.py
def session_overview(request):
SessionListFormSet = modelformset_factory(session_log, form=SessionList, extra = 10, exclude =('anaesthetist_id',), can_delete=True)
x = session_log.objects.filter(anaesthetist_id=request.user.id).count()
y = x-10
initialformset = SessionListFormSet(queryset=session_log.objects.filter(anaesthetist_id=request.user.id).order_by("session_start_datetime")[y:])
if request.method == 'POST':
submitted_data = SessionListFormSet(data=request.POST)
if submitted_data.is_valid():
for session in submitted_data:
new_session = session.save(commit=False)
new_session.anaesthetist_id = request.user
new_session.save()
X и y используются для того, чтобы перевернуть набор запросов и дать мне последние 10 результатов в порядке убывания, чтобы вы добавили новый сеанс, обычно более поздний, в конец набора форм. это стилистический бред
Проблема в том, что когда я пытаюсь сохранить или отредактировать форму, я получаю:
IntegrityError at /trainee/dataentry/
NOT NULL constraint failed: trainee_session_log.session_end_datetime
Но я могу схитрить, добавив «if not none» в цикле сохранения:
заблокированные views.py
if request.method == 'POST':
submitted_data = SessionListFormSet(data=request.POST)
if submitted_data.is_valid():
for session in submitted_data:
new_session = session.save(commit=False)
new_session.anaesthetist_id = request.user
if new_session.session_end_datetime is not None:
new_session.save()
Я искренне не понимаю, почему именно это поле вызывает проблему. Понятно, что это полный бред
Я действительно веду себя глупо?