오류가 발생합니다.
IntegrityError at / projects / 1 / issues / new / NOT NULL constraint failed : issues_issue.project_id Request Method : POST Request URL : http://127.0.0.1:8000/projects/1/issues/new/ Django 버전 : 3.0.3 예외 유형 : IntegrityError 예외 값 :
NOT NULL 제약 조건 실패 : issues_issue.project_id
이슈에는 프로젝트에 대한 외래 키가 있으며 form_valid 메서드에 할당하고 사용자와 동일하게 수행하며 제대로 작동합니다.
views.py의 CreateView :
class IssueCreateView(LoginRequiredMixin, CreateView):
model = Issue
fields = ['title', 'details', 'priority', 'status', 'estimated_work_hours', 'loaded_work_hours']
def form_valid(self, form):
form.instance.project = get_object_or_404(Project, pk=self.kwargs['project_id'])
print(form.instance.project)
form.instance.creator = self.request.user
return super().form_valid(form)
선 print(form.instance.project)
은 올바른 프로젝트를 인쇄하므로 작동합니다.
models.py :
class Issue(models.Model):
project = models.ForeignKey(Project, on_delete=models.CASCADE)
creator = models.ForeignKey(User, related_name="%(class)ss_created", on_delete=models.CASCADE)
...
...
form_valid 메서드에서 작성자 필드를 사용자에게 할당 할 수있는 이유는 무엇입니까? 그러나 프로젝트 필드에 대해 동일한 작업을 수행하면 작동하지 않고 이해가되지 않습니다.
아무도 문제가 무엇인지 알고 있습니까?
감사
귀하의 양식을 준수하지 않는 project
및 creator
인스턴스입니다. 방금 설정했다면 거의 동일합니다.form.instance.xyz = self.request.user
당신은 추가 할 필요가 그래서 project
및 creator
귀하의 필드에.
사용하는 경우 {{ form.as_p }}
다음 문제가 발생합니다. 이러한 필드가 양식에 포함됩니다. 이를 처리하는 방법에는 여러 가지가 있습니다. 하나는 사용자 정의 양식을 숨기는 것입니다. 최종 결과는 다음과 같습니다.
from django import forms
class IssueForm(forms.ModelForm):
class Meta:
model = Issue
fields = ['project', 'creator', 'title', 'details', 'priority', 'status', 'estimated_work_hours', 'loaded_work_hours']
widgets = {
'project': forms.HiddenInput(),
'creator': forms.HiddenInput(),
}
class IssueCreateView(LoginRequiredMixin, CreateView):
model = Issue
form_class = IssueForm
def form_valid(self, form):
form.instance.project = get_object_or_404(Project, pk=self.kwargs['project_id'])
form.instance.creator = self.request.user
return super().form_valid(form)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다