2017-04-26 2 views
-1

기록을 위해이 웹 사이트에서 비슷한 대답을 찾았지만 여전히 벽을 치고 있습니다.Django : "모델"일치하는 쿼리가 존재하지 않습니다.

장고 버전 1.10을 사용하고 있으며 데이터베이스 엔진으로 MySQL을 실행하고 있습니다. 내 뷰를 통해 데이터베이스에 정보를 저장할 때 관련 모델 내에서 OneToOneField를 동시에 업데이트하려고하지만 오류가 발생합니다. "IndividualEmp"일치하는 쿼리가 존재하지 않습니다. 여기

는 모델입니다 :

class IndividualEmp(models.Model): 
name = models.CharField(max_length = 100, db_column = 'name', primary_key = True) 
department = models.CharField(db_column='department', max_length=30, blank=True, null=True) 
emp_type = models.CharField(db_column='emp_Type', max_length=15, blank=True, null=True) 

class Meta: 
    managed = False 
    db_table = 'individual_emp' 
    app_label = 'users' 

class IndividualDetails(models.Model): 
d_name = models.OneToOneField(IndividualEmp, models.DO_NOTHING, 
           db_column = 'd_name', primary_key = True) 
gender = models.CharField(max_length=1, blank=True, null=True) 
email = models.CharField(max_length=20, blank=True, null=True) 
phone = models.CharField(max_length=9, blank=True, null=True) 

class Meta: 
    managed = False 
    db_table = 'individual_details' 
    app_label = 'users' 

그리고 여기 내 views.py 파일입니다, 다시 내가하고자하는 모든

Environment: 


Request Method: POST 
Request URL: http://127.0.0.1:8000/users/signup/ 

Django Version: 1.10.6 
Python Version: 2.7.11 
Installed Applications: 
['django.contrib.admin', 
'django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.messages', 
'django.contrib.staticfiles', 
'users'] 
Installed Middleware: 
['django.middleware.security.SecurityMiddleware', 
'django.contrib.sessions.middleware.SessionMiddleware', 
'django.middleware.common.CommonMiddleware', 
'django.middleware.csrf.CsrfViewMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware', 
'django.middleware.clickjacking.XFrameOptionsMiddleware'] 

Traceback: 

File "C:\Users\Stone\Anaconda2\lib\site-packages\django\core\handlers\exception.py" in inner 
    42.    response = get_response(request) 

File "C:\Users\Stone\Anaconda2\lib\site-packages\django\core\handlers\base.py" in _get_response 
    187.     response = self.process_exception_by_middleware(e, request) 

File "C:\Users\Stone\Anaconda2\lib\site-packages\django\core\handlers\base.py" in _get_response 
    185.     response = wrapped_callback(request, *callback_args, **callback_kwargs) 

File "C:\Program Files\virtualenvs\env1\fireball\users\views.py" in signup 
    25.    obj_3 = IndividualEmp.objects.get(name = 'name') 

File "C:\Users\Stone\Anaconda2\lib\site-packages\django\db\models\manager.py" in manager_method 
    85.     return getattr(self.get_queryset(), name)(*args, **kwargs) 

File "C:\Users\Stone\Anaconda2\lib\site-packages\django\db\models\query.py" in get 
    385.     self.model._meta.object_name 

Exception Type: DoesNotExist at /users/signup/ 
Exception Value: IndividualEmp matching query does not exist. 

: 여기

from users.forms import Register 
from users.models import (Attendee, IndividualDetails, IndividualEmp) 

# Create your views here. 

def signup(request): 
form = Register(request.POST) 
if request.method == 'POST': 
    if form.is_valid(): 

     obj = Attendee() 
     obj_1 = IndividualDetails() 
     obj_2 = IndividualEmp() 

     obj.attendee_ID = form.cleaned_data['attendee_ID']    
     obj_1.name = form.cleaned_data['name'] 
     obj_1.department = form.cleaned_data['department'] 
     obj_1.emp_type = form.cleaned_data['emp_type'] 
     obj_2.gender = form.cleaned_data['gender'] 
     obj_2.email = form.cleaned_data['email'] 

     obj_3 = IndividualEmp.objects.get(name = 'name') 

     request.d_name.individualdetails.individualemp = obj_3 
     request.d_name.individualdetails.save() 

     obj.save() 
     obj_1.save() 
     obj_2.save() 

     return HttpResponseRedirect('users/signup') 

else: 
    form = Register() 

return render(request, 'users/signup.html', {'form': form})) 

는 역 추적입니다 do는 IndividualEmp "name"에 필드 항목을 가지고 있으며,이 동일한 항목이 IndividualDetails "d_name"에 전달되어 이것을 내 datab에 저장합니다 ase. 도움이된다면 충분한 정보를 게시하지 않으면 용서해주십시오.

+0

여기서 무엇을하는지 분명치 않습니다. 이미 obj2에 IndividualEmp 개체가 있습니다. 왜 다른 쿼리를 수행하려고합니까? 리터럴 문자열 "name"을 쿼리로 사용하는 이유는 무엇입니까? –

+0

Model.objects.get 사용에 대한 제 이해가 잘못되었을 수도 있습니다. 리터럴 문자열이 사용 된 다른 솔루션을 읽었습니다. IndividualDetails에 정보를 "전달"하기 위해 다른 IndividualEmp obj (obj3)를 만들었습니다. 적어도 그것이 아이디어였습니다. 구문이 Model.objects.get (id = field_name) 인 솔루션을 보았습니다. 이 경우, 필자의 모델 (나는 생각한다)은 어떤 필드에도 할당 할 수있는 "id"를 가지고 있지 않다. 사실 IndividualEmp.objects.get (id = name)을 사용하려고 시도했지만 "id"가 선택이 아니라는 오류가 발생했습니다. –

+0

값이있는 필드가 혼란 스럽습니다. 'name = "name"'은 리터럴 문자열 "name"으로 필드'name'을 질의합니다. 물론 일치가 없을 것입니다. 찾으려는 이름의 * value * 필드를'name' 필드에 쿼리해야합니다. (비록 내가 아직도 당신이 새로운 IndividualEmp를 필요로하는지 이해할 수는 없지만). 그리고 네, 당신의 모델은 id 필드를 가지고 있습니다. 당신은 정말로 장고 Django 튜토리얼을 수행해야합니다. –

답변

0
obj_3 = IndividualEmp.objects.get(name = 'name') 

"get"방법을 사용하면 데이터베이스에서 django expect에는 해당 이름의 레코드가 하나만 있습니다. 해당 이름이 둘 이상이거나 전혀없는 경우 예외가 발생합니다.

https://docs.djangoproject.com/en/1.11/topics/db/queries/#retrieving-a-single-object-with-get

+0

답장을 보내 주셔서 감사합니다. SQL 테이블 individual_emp의 필드 이름은 "Name", "Department", "Emp_Type"입니다. obj_3 = IndividualEmp.objects.get (name = 'Name')과 같은 구문을 작성해야합니까? –

관련 문제