我一直在嘗試允許員工用戶將作業發布到數據庫,但是我不斷遇到上述問題。我嘗試過設置data['id'] = 0/''以及刪除表和 makemigrations/migrate。models.pyfrom django.db import modelsfrom teachers.models import Teacherclass Homework(models.Model): title = models.CharField(max_length=100) descripiton = models.CharField(max_length=500) due = models.DateField() teacher = models.OneToOneField( Teacher, null=True, blank=True, on_delete=models.CASCADE) def __str__(self): return self.titleform.pyfrom django import formsclass DateInput(forms.DateInput): input_type = 'date'class HomeworkForm(forms.Form): title = forms.CharField(label='Title', max_length=100) descripiton = forms.CharField(label='Descripiton', max_length=500) due = forms.DateField(label='Due', widget=DateInput)views.pydef homework(request): if request.user.is_authenticated & request.user.is_staff: if request.method == 'POST': data = request.POST.copy() data['teacher'] = request.user.username request.POST = data print(request.POST) form = HomeworkForm(request.POST) if form.is_valid(): post = Homework(form) post.save() messages.info(request, 'Form sent') print('worked') return render(request, 'index/index.html') else: print('error in form') form = HomeworkForm() return render(request, 'dashboard/setHomework.html', {'form': form}) else: form = HomeworkForm() return render(request, 'dashboard/setHomework.html', {'form': form}) else: return redirect('index')
3 回答

墨色風雨
TA貢獻1853條經驗 獲得超6個贊
您是否嘗試使用 data['teacher'] = request.user 而不是 data['teacher'] = request.user.username ?

SMILET
TA貢獻1796條經驗 獲得超4個贊
我很欣賞這些答案。我設法通過將表單轉換為模型表單來解決這個問題,因為該表單模型更適合這種情況,因為模型字段直接映射到輸入。
新形式.py
from homework.models import Homework
from django import forms
class HomeworkForm(forms.ModelForm):
class Meta:
model = Homework
fields = ['title', 'description', 'due']
widgets = {
'due': forms.DateInput(format=('%m/%d/%Y'), attrs={'label': 'due date', 'type': 'date'}),
}
添加回答
舉報
0/150
提交
取消