Django中使用ModelForm实现Admin功能

接上一篇<Django中使用Bootstrap>

ModelForm 可以将数据库中的信息展示在一个表中,因此我们在查询数据库信息时可以使用ModelForm在前端展示查询到的信息。

在上篇中,要实现点击'id'时,可以显示该id的用户信息,并能修改相关信息。

一、展示数据库信息

1、在信息展示页面的'id'上添加<a>标签,使之在页面上点击'id'时跳转至客户详细信息页面,展示客户各项信息。

customer.py,点击'id'时url跳转至'/stu_crm/customer/id/'

<td><a href="/stu_crm/customer/{{ customer.id }}/">{{ customer.id }}</a></td>

2、添加新的url规则

stu_crm/urls.py

urlpatterns = [
    url(r'^customer/(\d+)/$',views.customer_info),
]

3、在app(stu_crm)下创建forms.py

forms.py

from django.forms import Form,ModelForm
import models

class CustomerModelForm(ModelForm):
    class Meta:
        model = models.Customer
        exclude=()                 #显示所有字段

    def __init__(self,*args,**kwargs):
        super(CustomerModelForm,self).__init__(*args,**kwargs)    #先继承父类中的__init__()方法,然后定义自己的

        for field_name in self.base_fields:                       #遍历整个字段列表
            field = self.base_fields[field_name]
            field.widget.attrs.update({'class':'form-control'})   #给每个字段定义样式

4、添加customer_info处理函数

views.py

from stu_crm import forms

def customer_info(request,customer_id):
    customer_obj = models.Customer.objects.get(id=customer_id)
    form = forms.CustomerModelForm(instance=customer_obj)    #将查询到的客户信息塞到form中
    return render(request,'stu_crm/customer_info.html',{'customer_info':form})  #将form(表单)以customer_info变量传递给前端页面

以上修改添加完毕后,点击页面的'id'就可以显示每条记录的详细信息了:

 

二、在页面中修改客户信息

要想修改并向后端服务器提交修改后的数据,需要使用form表单。

1、前端页面customer_info.html,参照bootstrap中的样式,稍加修改:

{% extends 'base.html' %}
{% load customer_tags %}

{% block page-header %}
客户详细信息
{% endblock %}

{% block page-content %}
    <form class="form-horizontal" action="" method="post"> {% csrf_token %}   #添加一个form表单,用于向后端提交数据
        {# 循环每个字段 #}
        {% for field in customer_info %}
            <div class="form-group">
                {# 字段名称 #}
                {# 如果字段为必填,标签前面加*提示 #}
                {% if field.field.required %}
                    <label class="col-sm-2 control-label">*{{ field.label }}</label>
                {# 如果字段非必填 #}
                {% else %}
                    {# 字体变细 #}
                    <label class="col-sm-2 control-label " style="font-weight:normal">{{ field.label }}</label>
                {% endif %}
                <div class="col-sm-10">
                    {# 字段内容 #}
                    {{ field }}
                    {# 如果存在错误 #}
                    {% if field.errors %}
                        {% for error in field.errors %}
                            <ul>
                                <li style="color: red">{{ error }}</li>
                            </ul>
                        {% endfor %}
                    {% endif %}
                </div>
            </div>
        {% endfor %}
        {# 添加提交按钮 #}
        <input class="btn btn-success pull-right" type="submit" value="Submit">
    </form>
{% endblock %}

2、后端处理函数views.py

 
  
from django.shortcuts import HttpResponse,redirect
...
def customer_info(request,customer_id):
customer_obj = models.Customer.objects.get(id=customer_id) #查询相应id的数据
if request.method=='POST':
form = forms.CustomerModelForm(request.POST,instance=customer_obj) #将customr_obj中相对应的内容修改为前端提交(request.POST)的,然后塞到form中用于前端展示
if form.is_valid():
form.save()
base_url='/'.join(request.path.split('/')[:-2])         #拼接url,修改完成后跳转显示各条信息列表
return redirect(base_url) #url跳转
else:
form = forms.CustomerModelForm(instance=customer_obj)
return render(request,'stu_crm/customer_info.html',{'customer_info':form}) #将form(表单)以customer_info变量传递给前端页面

 

转载于:https://www.cnblogs.com/ahaii/p/5752749.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要在 Djangoadmin 后台添加图片,需要进行以下步骤: 1. 在你的模型添加一个 ImageField 字段,例如: ```python from django.db import models class MyModel(models.Model): name = models.CharField(max_length=100) image = models.ImageField(upload_to='images/') ``` 2. 在 admin.py 文件注册你的模型,并创建一个自定义的模型表单类来处理文件上传,例如: ```python from django.contrib import admin from django.forms import ModelForm from .models import MyModel class MyModelForm(ModelForm): class Meta: model = MyModel fields = '__all__' def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) instance = getattr(self, 'instance', None) if instance and instance.id: self.fields['image'].required = False class MyModelAdmin(admin.ModelAdmin): form = MyModelForm admin.site.register(MyModel, MyModelAdmin) ``` 3. 确保你的 MEDIA_URL 和 MEDIA_ROOT 设置正确,并且在你的 urls.py 文件添加一个 urlpatterns 来处理 media 文件,例如: ```python from django.conf import settings from django.conf.urls.static import static from django.contrib import admin from django.urls import path urlpatterns = [ path('admin/', admin.site.urls), ] if settings.DEBUG: urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) ``` 4. 最后,在 admin 后台创建或编辑一个 MyModel 对象时,你应该会看到一个可以上传图片的表单字段。 注意:以上代码仅供参考,你需要根据你的具体情况进行调整。 ### 回答2: 在Djangoadmin添加图片可以通过以下步骤完成: 1. 首先,在你的models.py文件定义一个模型类,该类包含一个FileField或ImageField字段,用于存储图片。例如: ```python from django.db import models class MyModel(models.Model): # 其他字段... image = models.ImageField(upload_to='images/') ``` 2. 在admin.py文件注册该模型类,并用Django提供的admin.ModelAdmin类作为参数,例如: ```python from django.contrib import admin from .models import MyModel class MyModelAdmin(admin.ModelAdmin): # 自定义admin界面显示信息 list_display = ['id', 'image'] admin.site.register(MyModel, MyModelAdmin) ``` 3. 在settings.py文件,添加MEDIA_URL和MEDIA_ROOT的配置,以指定图片上传和访问的路径。例如: ```python MEDIA_URL = '/media/' MEDIA_ROOT = os.path.join(BASE_DIR, 'media') ``` 4. 在项目的urls.py文件,添加一个url模式以处理图片的访问请求。例如: ```python from django.conf.urls import url from django.conf import settings from django.conf.urls.static import static urlpatterns = [ # 其他url模式... ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) ``` 5. 运行Django开发服务器,并通过admin界面创建或编辑MyModel对象时,你将能够选择和上传图片。这些图片将保存在指定的MEDIA_ROOT目录,并且在页面上以链接或小缩略图的形式进行显示。 希望以上步骤对你有帮助! ### 回答3: 在Djangoadmin后台添加图片可以通过以下步骤进行操作: 1. 首先,在models.py文件创建一个模型类,用于保存图片的相关信息,例如图片的名称、描述和图片本身等。同时,为图片字段添加一个FileField或ImageField类型的属性,用于保存上传的图片文件。例如: ```python from django.db import models class Image(models.Model): name = models.CharField(max_length=100) description = models.TextField() image = models.ImageField(upload_to='images/') ``` 2. 接下来,在admin.py文件注册该模型类,以便在admin后台能够对图片进行管理。例如: ```python from django.contrib import admin from .models import Image admin.site.register(Image) ``` 3. 运行`python manage.py makemigrations`和`python manage.py migrate`命令,将模型类的更改应用到数据库。 4. 然后,在admin后台登录,进入图片管理页面。可以看到已经添加了一个新的模型类Image。点击进入该模型页面,可以添加、编辑和删除图片信息。 5. 在添加或编辑图片信息时,会出现一个用于选择图片文件的文件选择框。点击选择文件按钮,选择本地的图片文件后,点击保存按钮即可将图片上传到服务器。 6. Django会默认将上传的图片文件保存在`MEDIA_ROOT`指定的目录下,可以通过在settings.py文件设置`MEDIA_ROOT`来指定图片保存的路径。 7. 在模板显示图片时,可以通过设置图片的URL,使用`{{ image.image.url }}`来获取图片的路径。可以在模板使用该URL来显示图片,例如: ```html <img src="{{ image.image.url }}" alt="{{ image.name }}"> ``` 这样,就可以在Djangoadmin后台添加和管理图片了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值