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

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 %}

  

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