レコードについては、私は同様の答えを求めてこのWebサイトを探しましたが、私はまだこれを理解しようと壁に頭を打っています。Django: "モデル"一致するクエリが存在しません
私はDjangoバージョン1.10を使用しており、データベースエンジンとしてMySQLを実行しています。私のデータベースに情報を保存する際に、関連するモデル内のOneToOneFieldを同時に更新したいのですが、エラーがスローされます。 "IndividualEmp"一致するクエリは存在しません。ここで
はモデルです:ここでは
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}))
がトレースバックです:
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.
、私がしたいすべてのdoはIndividualEmp "name"へのフィールドエントリを持っており、この同じエントリはIndividualDetails "d_name"に渡され、これを自分のdatabに保存しますase。私が十分な情報を投稿しなかったなら、どんな助けもありがたいです。
ここでは何をしているのかはっきりしません。あなたはすでに 'obj2'にIndividualEmpオブジェクトを持っています。なぜあなたは別のものを照会しようとしていますか?照会に文字列 "name"を使用しているのはなぜですか? –
Model.objects.getを利用する上での私の理解が間違っている可能性があります。リテラル文字列が使用されていた他のソリューションを読んでいます。 IndividualDetailsに情報を "渡す"ために別のIndividualEmp obj(obj3)を作った。少なくともそれがアイディアだった。私は構文がModel.objects.get(id = field_name)であるソリューションを見てきました。これらのケースでは、私のモデル(私は思う)は、任意のフィールドに割り当てるために "id"を選択する必要はありません。実際、私はIndividualEmp.objects.get(id = name)を使用しようとしましたが、 "id"は選択肢ではないというエラーがスローされました。 –
Yo'reは値とフィールドを混同しています。 'name =" name "'は、文字列 "name"で 'name'フィールドを問い合わせます。もちろんマッチはありません。検索する必要のある名前の* value *フィールドを 'name'フィールドに照会する必要があります。 (なぜ私はあなたが新しいIndividualEmpが必要なのかまだ分かりませんが)。そして、あなたのモデルにはidフィールドもあります。あなたは実際には、基本的なDjangoチュートリアルに行く必要があります。 –