首页 > 其他 > 详细

django5-书籍与出版社关联外键

时间:2019-09-29 14:56:53      阅读:62      评论:0      收藏:0      [点我收藏+]

1.外键相关

  的概念 ,这里是一个出版社对应本书籍 ! 设计表使用model

  models.ForeignKey(‘关联一‘, on_delete=models.CASCADE)          #给多设置外键 ,关联一 ,设置级联删除当一的内容被删除 ,所关联的多都被删除

from django.db import models


# Create your models here.
class presslist(models.Model):
    name = models.CharField(max_length=32)

    def __str__(self):
        return self.name


class Book(models.Model):
    name = models.CharField(max_length=32)
    p_id = models.ForeignKey(presslist, on_delete=models.CASCADE)

2.urls.py代码

  两套增删改查

from django.conf.urls import url
from app1 import views

urlpatterns = [
    url(r^press/list/, views.presslist, name=presslist),
    url(r^press/del/(\d+)/, views.pressdel, name=pressdel),
    url(r^press/add/, views.pressadd, name=pressadd),
    url(r^press/edit/(?P<edit_id>\d+)/, views.pressedit1.as_view(), name=pressedit),

    url(r^book/list/, views.booklist, name=booklist),
    url(r^book/del/(\d+)/, views.bookdel, name=bookdel),
    url(r^book/add/, views.bookadd, name=bookadd),
    url(r^book/edit/(\d+)/, views.bookedit, name=bookedit),

]

3.views视图函数

  两套视图函数

  重点的 :models.Book.objects.create(name=book_name, p_id_id=press_id)  ,其中创建书籍记录需要关联出版社 ,这里面必须是从出版社表取数据p_id_id

from django.shortcuts import render, redirect, reverse, HttpResponse
from django.views import View
from app1 import models
import time
import functools
from django.utils.decorators import method_decorator


# Create your views here.


def presslist(request):
    msg_all = models.presslist.objects.all()
    return render(request, cbs.html, {msg: msg_all})


def pressadd(request):
    if request.method == POST:
        press_name = request.POST.get(name)
        models.presslist.objects.create(name=press_name)
        return redirect(reverse(presslist))
    return render(request, cbsadd-edit.html)


def pressdel(request, del_id):
    print(del_id, type(del_id))
    models.presslist.objects.get(pk=del_id).delete()
    return redirect(reverse(presslist))


def pressedit(request, edit_id, test_id):
    obj = models.presslist.objects.get(pk=edit_id)
    print(test_id, edit_id)
    msg = ‘‘
    if request.method == POST:
        obj.name = request.POST.get(name)

        if models.presslist.objects.filter(name=obj.name):
            msg = 已存在

        if not obj.name:
            msg = 不能为空

        if not models.presslist.objects.filter(name=obj.name) and obj.name:
            obj.save()

            return redirect(reverse(presslist))
    return render(request, cbsadd-edit.html, {obj: obj, msg: msg})


class pressedit1(View):

    def get(self, request, edit_id, msg=‘‘):
        obj = models.presslist.objects.get(pk=edit_id)
        return render(request, cbsadd-edit.html, {obj: obj, msg: msg})

    def post(self, request, edit_id):
        msg = ‘‘
        obj = models.presslist.objects.get(pk=edit_id)
        obj.name = request.POST.get(name)
        if models.presslist.objects.filter(name=obj.name):
            msg = 已存在
        if not obj.name:
            msg = 不能为空
        if not models.presslist.objects.filter(name=obj.name) and obj.name:
            obj.save()
            return redirect(reverse(presslist))
        return self.get(request, edit_id, msg)


def booklist(request):
    msg_all = models.Book.objects.all()
    return render(request, cbs.html, {msg: msg_all})


def bookdel(request, del_id):
    models.Book.objects.get(pk=del_id).delete()
    return redirect(reverse(booklist))


def bookadd(request):
    msg_all = models.presslist.objects.all()
    if request.method == POST:
        book_name = request.POST.get(name)
        press_id = int(request.POST.get(pid))
        models.Book.objects.create(name=book_name, p_id_id=press_id)
        return redirect(reverse(booklist))
    return render(request, cbsadd-edit.html, {msg_all: msg_all})


def bookedit(request, edit_id):
    obj = models.Book.objects.get(pk=edit_id)
    msg = ‘‘
    if request.method == POST:
        obj.name = request.POST.get(name)

        if models.Book.objects.filter(name=obj.name):
            msg = 已存在

        if not obj.name:
            msg = 不能为空

        if not models.Book.objects.filter(name=obj.name) and obj.name:
            obj.save()

            return redirect(reverse(booklist))
    return render(request, cbsadd-edit.html, {obj: obj, msg: msg})

4.模板复用

  cbs.html

###展示出版社 ,展示书籍列表的模板
{% extends base.html %}
{% block body1 %}
    <table class="text-center table table-striped table-bordered">
        <tr>
            <td>ID</td>
            {% if msg.0.p_id %}
                <td>书名</td>
                <td>出版社名字</td>
            {% else %}
                <td>出版社名字</td>
            {% endif %}
            <td>操作</td>
        </tr>
        {% for obj in msg %}
            <tr>
                <td>{{ obj.pk }}</td>
                <td>{{ obj.name }}</td>
                {% if obj.p_id %}
                    <td>{{ obj.p_id.name }}</td>
                    <td><a href={% url bookedit obj.pk %}><i class="fa fa-pencil-square-o" aria-hidden="true">&nbsp&nbsp&nbsp</i></a>
                        <a href={% url bookdel obj.pk %}><i class="fa fa-remove" aria-hidden="true"></i></a></td>
                {% else %}
                    <td><a href={% url pressedit edit_id=obj.pk %}><i class="fa fa-pencil-square-o"
                                                                        aria-hidden="true">&nbsp&nbsp&nbsp</i></a>
                        <a href={% url pressdel obj.pk %}><i class="fa fa-remove" aria-hidden="true"></i></a></td>
                {% endif %}

            </tr>
        {% endfor %}
    </table>
{% endblock %}

  cbsadd-edit.html

###修改与新增的复用模板
{% extends base.html %}

{% block body1 %}
    <form action="" method="post">
        <div style="margin-left: 100px;margin-top: 50px;" class="col-md-6 ">
            <input type="text" class="form-control" name="name" placeholder="{{ obj.name }}">{{ msg }}
            {% if msg_all %}
                <select name="pid">
                    {% for obj in msg_all %}
                        <option value="{{ obj.pk }}">{{ obj.name }}</option>
                    {% endfor %}
                </select>
            {% endif %}

        </div>
        <div style="margin-left: 10px;margin-top: 50px;" class="col-md-2 ">
            <button type="submit" class="btn btn-primary">提交</button>
        </div>
    </form>
{% endblock %}

 

  

 

django5-书籍与出版社关联外键

原文:https://www.cnblogs.com/quguanwen/p/11398973.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!