如何在django中的另一个表中插入主键值



我已经创建了模型代码,这里是

from django.db import models

在此处创建您的模型

class EmployeeDetail(models.Model):
emp_fname = models.CharField(max_length=50, default="")
emp_lname = models.CharField(max_length=50, default="")
emp_uname = models.CharField(max_length=100, default="")
emp_email = models.EmailField(max_length=254, default="")
emp_password = models.CharField(max_length=100, default="")
emp_dob = models.DateField(max_length=50, default="")
emp_doj = models.DateField(max_length=50, default="")
emp_designation = models.CharField(max_length=100, default="")
emp_salary = models.IntegerField()
emp_leaves = models.IntegerField()
emp_contact = models.CharField(max_length=12, default="")
emp_photo = models.ImageField(upload_to="employee/images", default="")
def __str__(self):
return self.emp_fname

class Post(models.Model):
emp_id = models.ForeignKey('EmployeeDetail', on_delete=models.CASCADE)
title = models.CharField(max_length=255)
content = models.TextField()
author = models.CharField(max_length=15)
timeStamp = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.title + ' by ' + self.author

我有view.py文件在这里被破坏

from django.shortcuts import render, redirect
from .models import EmployeeDetail, Post
from django.http import HttpResponse
from django.contrib import messages
# Create your views here.

def login(request):
# messages.success(request, 'Welcome to Login Form')
if request.method == "POST":
uname = request.POST['uname']
password = request.POST['password']
employee = EmployeeDetail.objects.filter(emp_uname=uname, emp_password=password)
# print(employee)
if employee:
uname = request.POST['uname']
request.session['emp_uname'] = uname
return redirect('employee/home')
# return redirect('employee/home')
else:
messages.error(request, 'Wrong Details')
return render(request, 'login.html', {})
return render(request, 'login.html', {})
def create_post(request):
if request.session.has_key('emp_uname'):
name = request.session['emp_uname']
query = EmployeeDetail.objects.filter(emp_uname=name)
if request.method == "POST":
title = request.POST.get('title')
eid = request.POST.get('eid')
euname = request.POST.get('ename')
content = request.POST.get('content')
print(eid, title, euname, content)
post = Post(emp_id=eid, title=title, content=content, author=euname)
post.save()
return redirect('view_post')
else:
return render(request, 'create_post.html', {'query': query})
else:
messages.error(request, 'You have to login First')
return redirect('/')

我在这里创建了post.html文件代码

<form method="POST">{% csrf_token %}
<div class="container"><br>
<div class="form-group row" align="center">
<label class="col-sm-1 col-form-label"></label>
<div class="col-sm-4">
<h3 align="center">Enter Blog Details</h3 align="center">
</div>
</div>
<div class="form-group row">
<label class="col-sm-2 col-form-label">Blog Title:</label>
<div class="col-sm-4">
<input type="text" name="title" id="title"  required maxlength="100"  />
{% for edetail in query %}
<input type="text" name="eid" id="eid" value =" {{ edetail.id}} "required maxlength="100"  />
<input type="text" name="ename" id="ename" value =" {{ edetail.emp_uname}} "required maxlength="100"  />
{% endfor %}
</div>
</div>

<div class="form-group row">
<label class="col-sm-2 col-form-label">Content :</label>
<div class="col-sm-4">
<textarea class="form-control" id="content" name="content" rows="3"></textarea>
</div>
</div>
<div class="form-group row">
<label class="col-sm-1 col-form-label"></label>
<div class="col-sm-4">
<button type="submit" class="btn btn-success">Submit</button>
</div>
</div>
</div>
</form>

提交create_post.html表单时出现错误无法分配"13":"Post.emp_id"必须是"EmployeeDetail"实例。那个错误我得到

djangoForeignKey不返回id,而是返回实例。请执行以下操作:

型号.py

class Post(models.Model):
employee = models.ForeignKey(EmployeeDetail, on_delete=models.CASCADE)
...

视图.py

empl = EmployeeDetail.objects.get(id=eid)
post = Post(employee=empl, title=title, content=content, author=euname)

您在create_post中执行了此操作

eid = request.POST.get('eid')

但这里emp_id是ForeignKey,所以它将接受员工的对象

这个也是

eid = EmployeeDetail.objects.filter(id=request.POST.get('eid'))

在您试图直接保存原始id值的情况下,由于出现错误,它需要实例。

你试试这个

empid = EmployeeDetail.objects.get(id=eid)
post = Post(emp_id=empid, title=title, content=content, author=euname)
post.save()

最新更新