【发布时间】:2021-07-20 07:01:36
【问题描述】:
我已经修复了几乎所有内容,表单打开,我可以进行编辑,但一旦我进行编辑并点击保存,就会显示:
我不明白出了什么问题。我为我的编辑个人资料页面做了同样的事情,它在那里工作得很好,所以我不明白为什么它在这里不起作用。
views.py:
class EditComplaint(UserPassesTestMixin, UpdateView):
model = Complaint
fields = ('reportnumber', 'eventdate', 'event_type', 'device_problem', 'manufacturer',
'product_code', 'brand_name', 'exemption', 'patient_problem', 'event_text', 'document')
template_name = 'newcomplaint.html'
def form_valid(self, request):
complaint = request.user.complaint
form = ComplaintForm(instance=complaint)
if request.method == 'POST':
form = ComplaintForm(request.POST, request.FILES, instance=complaint)
if form.is_valid():
form.save()
context = {'form': form}
return render(request, 'newcomplaint.html', context)
def test_func(self):
complain = self.get_object()
if self.request.user == complain.user:
return True
raise Http404(_('This complain does not exist'))
urls.py:
path('Complaint/<int:pk>/edit/', accounts.views.EditComplaint.as_view(),
name='Complaint')
似乎有什么问题?我认为我需要改变我的观点,因为其他一切似乎都运作良好,所以我不包括其他任何东西。但我不明白需要改变什么
forms.py:
class DateInput(forms.DateInput):
input_type = 'date'
class ComplaintForm(ModelForm):
class Meta:
model = Complaint
fields = '__all__'
widgets = {
'reportnumber': forms.TextInput(attrs={'placeholder': 'Report
number'}),
'event_type': forms.TextInput(attrs={'placeholder': 'Event
type'}),
'eventdate': DateInput(),
'device_problem': forms.TextInput(attrs={'placeholder':
'Device Problem'}),
'event_text': forms.Textarea(attrs={'style': 'height:
130px;width:760px'}),
'manufacturer': forms.TextInput(attrs={'placeholder': 'Enter
Manufacturer Name'}),
'product_code': forms.TextInput(attrs={'placeholder': 'Enter
Product Code'}),
'brand_name': forms.TextInput(attrs={'placeholder': 'Enter
Brand Name'}),
'exemption': forms.TextInput(attrs={'placeholder': 'Enter
Exemption'}),
'patient_problem': forms.TextInput(attrs={'placeholder':
'Enter Patient Problem'}),
}
def clean(self):
cleaned_data = super(ComplaintForm, self).clean()
reportnumber = cleaned_data.get('reportnumber')
event_text = cleaned_data.get('event_text')
if not reportnumber and not event_text:
raise forms.ValidationError('You have to write something!')
return cleaned_data
models.py:
class Complaint(models.Model):
user = models.ForeignKey(User, on_delete= models.CASCADE, null =
True, blank=True)
id = models.AutoField(blank=False, primary_key=True)
reportnumber = models.CharField(max_length=500 ,null = True, blank=
False)
eventdate = models.DateField(null=True, blank=False)
event_type = models.CharField(max_length=300, null=True, blank=True)
device_problem = models.CharField(max_length=300, null=True,
blank=True)
manufacturer = models.CharField(max_length=300, null=True,
blank=True)
product_code = models.CharField(max_length=300, null=True,
blank=True)
brand_name = models.CharField(max_length = 300, null=True,
blank=True)
exemption = models.CharField(max_length=300, null=True, blank=True)
patient_problem = models.CharField(max_length=500, null=True,
blank=True)
event_text = models.TextField(null=True, blank= True)
document = models.FileField(upload_to='static/documents', blank=True,
null=True)
def __str__(self):
return self.reportnumber
【问题讨论】:
标签: django django-models django-views django-forms django-templates