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

时间:2020-03-13 14:10:35

标签: python 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('/')

我在这里有create_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”实例。我收到的错误

3 个答案:

答案 0 :(得分:0)

django ForeignKey不返回ID,而是返回一个实例。 改为这样做:

models.py

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

views.py

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

答案 1 :(得分:0)

您在create_post

中完成了此操作

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

但是这里emp_id是ForeignKey,因此它将接受雇员的对象

这样做

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

答案 2 :(得分:0)

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

您尝试这样的事情

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