【问题标题】:ApplicantEducation matching query does not exist申请人教育匹配查询不存在
【发布时间】:2021-03-11 05:22:35
【问题描述】:

views.py 中的这个函数

views.py

    def UpdateEducation(request):
        context = {}
        user_obj = request.user
        if not user_obj.is_authenticated:
            return redirect('login')
    
        user_id = Applicant.objects.filter(app_id = user_obj.app_id).first()
        print(user_id)
        applicant = ProfileInfo.objects.filter(user=user_id).first()
        print(applicant)
        user_info = ApplicantEducation.objects.filter(applicant_info = applicant).get()
        if request.POST:
            form = EducationForm(request.POST, instance=user_info)
            if form.is_valid():
                obj = form.save(commit=False)
                obj.applicant_info = applicant
                print(obj)
                obj.save()
                return redirect('profile')
            else:
                form = EducationForm()
                context['education_form'] = form
        else:
            try:
                form = EducationForm(
                    initial={
                        'institute_name': user_info.institute_name,
                        'marks_percentage' : user_info.marks_percentage,
                        'affilation_with' : user_info .affilation_with,
                        'date_completion':user_info.date_completion,
                        'degree_details' : user_info.degree_details,
                    }
                )
                context['education_form']= form
            except:
                form = EducationForm()
                context['education_form']= form
        return render(request, 'admission/signup.html', context)

我为views.py制作的这个模型类 models.py


    class DegreeDetails (models.Model):
        degree_name = models.CharField(max_length=10)
        degree_category = models.CharField(max_length= 15)
    
        def __str__(self):
            return '%s %s'%(self.degree_name, self.degree_category)
    
    class ApplicantEducation(models.Model):
        applicant_info = models.ForeignKey(ProfileInfo, on_delete=models.CASCADE)
        degree_details = models.ForeignKey(DegreeDetails, on_delete= models.CASCADE)
        marks_percentage = models.FloatField(max_length=5, default=0.0)
        institute_name = models.CharField(max_length=100)
        affilation_with = models.CharField(max_length= 50)
        date_completion = models.DateField(auto_now_add=False, blank=True)

这是模型的表单类..... forms.py

    class EducationForm( forms.ModelForm):
        
        class Meta:
            model = ApplicantEducation
            fields = [
                'institute_name',
                'marks_percentage',
                'affilation_with',
                'date_completion',
                'degree_details',
            ] 
        def clean(self):
            if self.is_valid():
                institute_name = self.cleaned_data['institute_name']
                marks_percentage = self.cleaned_data['marks_percentage']
                affilation_with = self.cleaned_data['affilation_with']
                date_completion = self.cleaned_data['date_completion']
                degree_details = self.cleaned_data['degree_details']

这是我得到的错误 错误

    ApplicantEducation matching query does not exist.
    Request Method: GET
    Request URL:    http://127.0.0.1:8000/education/
    Django Version: 3.1.7
    Exception Type: DoesNotExist
    Exception Value:    
    ApplicantEducation matching query does not exist.
    Exception Location: C:\Users\cms.user\AppData\Local\Programs\Python\Python39\lib\site-packages\django\db\models\query.py, line 429, in get
    Python Executable:  C:\Users\cms.user\AppData\Local\Programs\Python\Python39\python.exe
    Python Version: 3.9.1
    Python Path:    
    ['D:\\Development\\cmsproject',
     'C:\\Users\\cms.user\\AppData\\Local\\Programs\\Python\\Python39\\python39.zip',
     'C:\\Users\\cms.user\\AppData\\Local\\Programs\\Python\\Python39\\DLLs',
     'C:\\Users\\cms.user\\AppData\\Local\\Programs\\Python\\Python39\\lib',
     'C:\\Users\\cms.user\\AppData\\Local\\Programs\\Python\\Python39',
     'C:\\Users\\cms.user\\AppData\\Roaming\\Python\\Python39\\site-packages',
     'C:\\Users\\cms.user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages']
    Server time:    Thu, 11 Mar 2021 05:03:04 +0000

以下代码行中存在错误..... user_info = 申请人教育.objects.filter(applicant_info = 申请人).get()

请任何人看看这个错误。整个代码旨在将用户的教育详细信息存储在后端数据库中...... 谢谢您,期待您的回复....

【问题讨论】:

  • user_info = get_object_or_404(ApplicantEducation,applicant_info =申请人) 我已将错误代码更改为上面的代码行,#GET Request 似乎有问题,但是我无法解决......谁可以帮忙??

标签: python-3.x django django-models django-views django-forms


【解决方案1】:

这么几样东西:

def UpdateEducation(request):
        context = {}
        user_obj = request.user
        if not user_obj.is_authenticated:
            return redirect('login')

可以替换为:

@login_required
def UpdateEducation(request):
        context = {}

Django 装饰器就是为此而来的 ;)

然后替换这个:

user_info = ApplicantEducation.objects.filter(applicant_info = applicant).get()

#if you can have multiple answers
user_info = ApplicantEducation.objects.filter(applicant_info=applicant)
#if you can have only one (unicity constraint)
user_info = ApplicantEducation.objects.get(applicant_info=applicant)

最后出现错误是因为您尝试获取一个不存在的 AplicantEducation 项目。似乎没有与您的申请人相关联的 AplicantEducation 项目

【讨论】:

  • ApplicantEducation 是模型,旨在存储来自用户输入的数据??
  • 那是我不确定你想做什么的事情。也许如果您提供有关您尝试制作的过程的解释,我们将能够更好地回答:)
【解决方案2】:
    if request.POST:
        user_info = ApplicantEducation.objects.filter(applicant_info = applicant).first()
        form = EducationForm(request.POST, instance=user_info)
        if form.is_valid():
            obj = form.save(commit=False)
            obj.applicant_info = applicant
            print(obj)
            obj.save()
            return redirect('profile')
        else:
            context['education_form'] = form
    else:
        try:
            user_info = ApplicantEducation.objects.filter(applicant_info = applicant).get()
            form = EducationForm(#some values)

问题在于post方法,比较两个views.py,你会看到区别。 谢谢

【讨论】:

    猜你喜欢
    • 2011-10-03
    • 1970-01-01
    • 2011-09-26
    • 2021-12-08
    • 1970-01-01
    • 2012-05-10
    • 2013-03-02
    • 2021-12-10
    • 2021-05-07
    相关资源
    最近更新 更多