如何复制django(2023年最新解答)

有没有人在啊,想请教下,如何复制django(2023年最新解答)
最新回答
梦已隔江南

2025-03-02 00:06:21

导读:今天首席CTO笔记来给各位分享关于如何复制django的相关内容,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

我是怎么做到使用django动态定义表单的

django中表单向导使用起来很简单的.

[python]?viewplain?copy

from?django.utils.translation?import?ugettext_lazy?as?_

from?django?import?forms

from?django.forms.formsets?import?BaseFormSet

from?django.forms.fields?import?FileField

from?django.forms.util?import?ValidationError

from?django.shortcuts?import?render_to_response

from?django.contrib.formtools.wizard?import?FormWizard

from?ddtcms.office.equipment.models?import?Equipment,Characteristic,CharacteristicValue

class?EquipmentForm(forms.ModelForm):

class?Meta:

model?=?Equipment

class?CharacteristicValueForm(forms.Form):

def?clean(self):

a=self.fields

s=self.data

self.cleaned_data?=?{}

#?下面的这一段for?是从?django的forms.py中的?full_clean?中复制来的

for?name,?field?in?self.fields.items():

#?value_from_datadict()?gets?the?data?from?the?data?dictionaries.

#?Each?widget?type?knows?how?to?retrieve?its?own?data,?because?some

#?widgets?split?data?over?several?HTML?fields.

value?=?field.widget.value_from_datadict(self.data,?self.files,?self.add_prefix(name))

try:

if?isinstance(field,?FileField):

initial?=?self.initial.get(name,?field.initial)

value?=?field.clean(value,?initial)

else:

value?=?field.clean(value)

self.cleaned_data[name]?=?value

if?hasattr(self,?'clean_%s'?%?name):

value?=?getattr(self,?'clean_%s'?%?name)()

self.cleaned_data[name]?=?value

except?ValidationError,?e:

self._errors[name]?=?self.error_class(e.messages)

if?name?in?self.cleaned_data:

del?self.cleaned_data[name]

#cl=self.cleaned_data

#debug()调试用的,查看cl的值,主要是看self.cleaned_data的值,如果return了,就看不到了

return?self.cleaned_data

class?EquipmentCreateWizard(FormWizard):

def?done(self,?request,?form_list):

return?render_to_response('equipment/done.html',

{

'form_data':?[form.cleaned_data?for?form?in?form_list],

})

def?get_form(self,?step,?data=None):

"Helper?method?that?returns?the?Form?instance?for?the?given?step."

form?????=?self.form_list[step](data,?prefix=self.prefix_for_step(step),?initial=self.initial.get(step,?None))

if?step?==?1:

if?data:

cg???????=?data.get('0-category',?1)

cs???????=?Characteristic.objects.all().filter(category__id=cg)

for?c?in?cs:

form.fields['Characteristic-'+str(c.id)]?=?forms.CharField(label?=?c.name)

g=form.fields

#debug()

return?form

#?从wizard.py中复制过来进行更改的.

def?render(self,?form,?request,?step,?context=None):

"Renders?the?given?Form?object,?returning?an?HttpResponse."

old_data?=?request.POST

prev_fields?=?[]

if?old_data:

hidden?=?forms.HiddenInput()

#?Collect?all?data?from?previous?steps?and?render?it?as?HTML?hidden?fields.

for?i?in?range(step):

old_form?=?self.get_form(i,?old_data)

hash_name?=?'hash_%s'?%?i

prev_fields.extend([bf.as_hidden()?for?bf?in?old_form])

prev_fields.append(hidden.render(hash_name,?old_data.get(hash_name,?self.security_hash(request,?old_form))))

if?step?==?1:

cg???????=?old_data.get('0-category',?1)

cs???????=?Characteristic.objects.all().filter(category__id=cg)

for?c?in?cs:

form.fields['Characteristic-'+str(c.id)]?=?forms.CharField(label?=?c.name)

g=form.fields

#debug()

if?step?==?2:

debug()

return?super(EquipmentCreateWizard,?self).render(form,?request,?step,?context=None)

def?get_template(self,?step):

return?'equipment/wizard_%s.html'?%?step

EquipmentCreateWizard其实也可以放在views.py中,而且我觉得更合理一点.

在EquipmentCreateWizard中,我试着修改过process_step函数,但是得不到正确的结果,后来修改了get_form,都是想从django的formtools的wizard.py中复制过来再进行修改的.

get_form的修改也没有得到正确的结果.后来就修改render函数,在第2步的时候,我将动态参数个数显示出来了.但是到最后结束done的环节,取得的formdata中,第二个form没有数据,就是一个空的{},

于是我又重新修改get_form函数,无非就是判断是不是第二步,然后给第二个form动态添加几个field:

[python]?viewplain?copy

if?step?==?1:

cg???????=?old_data.get('0-category',?1)

cs???????=?Characteristic.objects.all().filter(category__id=cg)

for?c?in?cs:

form.fields['Characteristic-'+str(c.id)]?=?forms.CharField(label?=?c.name)

g=form.fields

#debug()

这段代码在get_form和render中都有,都是判断是不是第2步,然后就根据第1步中选择的设备的分类来查询到具体的分类,再根据分类来获取该种分类的设备有哪些参数,然后根据参数个数修改form的参数field的个数.

'Characteristic-'+str(c.id)是用来以后保存数据的时候,split这个字符串,得到参数的id,并在参数值表中保存Characteristic-1,Characteristic-2...的value.

g=form.fields

#debug()

用来断点查看参数field有多少个,是否修改成功.

=========================

[python]?viewplain?copy

from?django.conf.urls.defaults?import?*

from?ddtcms.office.equipment.forms?import?EquipmentForm,CharacteristicValueForm,EquipmentCreateWizard

urlpatterns?=?patterns('ddtcms.office.equipment.views',

url(r'^$',?'index',?name="equipment_index"),

url(r'^add/$',?'equipment_create',?name="equipment_create"),

url(r'^add-by-wizard/$',EquipmentCreateWizard([EquipmentForm,?CharacteristicValueForm]),?name="equipment_create_by_wizard"),?)

以上代码,csdnbolg?自动过滤了?$符号,我加了上去,可能有不对的地方.

==========================

wizard_0.html

[html]?viewplain?copy

{%?block?content?%}

h2添加/修改设备向导/h2

p第?{{?step?}}?步,?共?{{?step_count?}}?步./p

p填写设备基本情况/p

form?method="POST"?action=""{%?csrf_token?%}

table

{{?form?}}

/table

input?type="hidden"?name="{{?step_field?}}"?value="{{?step0?}}"?/

{{?previous_fields|safe?}}

input?type="submit"?value="Submit"?/

/form

{%?endblock?%}

===================

wizard_1.html

[html]?viewplain?copy

{%?block?content?%}

h2添加/修改设备向导/h2

p第?{{?step?}}?步,?共?{{?step_count?}}?步./p

p填写设备参数,?如果没有要填写的内容,?请直接点击确定./p

form?method="POST"?action=""{%?csrf_token?%}

table

{{?form?}}

/table

input?type="hidden"?name="{{?step_field?}}"?value="{{?step0?}}"?/

{{?previous_fields|safe?}}

input?type="submit"?value="Submit"?/

/form

{%?endblock?%}

====================

done.html

[html]?viewplain?copy

{%?block?content?%}

h2添加/修改设备向导/h2

p您已经成功添加了一个设备./p

{{form_data}}

{%?endblock?%}

============

还可以用另外的form来实现formwizard,就是第一个form1,主要用来让用户选择设备的分类,form2就根据前面的来动态生成参数的表单.原理是一样的.

还有就是写2个view来模拟formwizard,第一个view增加一个设备,第二个view带设备id这个参数即可,可以很有效的增加设备的参数.

如何在社区版pycharm中安装django

django是Python的一个开源web框架,在pycharm开发环境中,pycharm专业版在新建一个项目的时候有django选项,帮助创建一个django框架的项目。pycharm社区版需要自己创建

第一步:安装django框架

可以用pycharm安装,打开file\setings\project\projectinterpreter查看项目已安装的包,单击绿色加号添加目标框架,

注意记录django的安装路径,我的安装路径是:c:\users\用户名\appdata\roaming\python\python36\site-packages\

第二步:为了能让Windows找到django-admin的路径,需要设置环境变量,

path,是告诉系统,当要求系统运行一个程序而没有告诉它程序所在的完整路径时,系统除了在当前目录下面寻找此程序外,还应到哪些目录下去寻找,

打开我的电脑\属性\高级系统设置\环境变量\找到path变量,把刚才记录的django的安装路径添加到path变量中。其中path变量中有的已经存有Python的目录,当path需要多个值的时候,两个路径之间用分号“;”隔开

第三步:打开Windows命令行,用django-admin.py创建项目,注意创建项目的路径c:\users\fyc

打开目录位置,找到创建的项目,看到里面有一些文件

第四步:用pycharm打开上一步所创建的项目,由于pycharm默认的项目目录是pycharmprojects,所以把刚才创建的项目拷贝到默认目录(也可以不拷贝,只是为了方便管理)

拷贝完项目之后打开pycharm,文件,新建工程,选择文件位置,把文件目录选在在pycharmproject下,刚才创建的目录下

打开项目,会出现提示

我们是想从一个已存在的资源创建项目,所以选是,完成创建

如何在django中使用多个数据库

Django可以自定义数据库读写路由,从实用的角度讲,一般就是主从复制的读写分离。这个比较简单,定义一个数据库路由即可,数据库路由的接口定义可以在Django官方文档,多数据库那一章找到。

cmd中如何在e盘新建django文件

1、在任意盘创建一个文件夹,然后在新建文件选择Django。

2、在url视图中创建路径。

3、在views视图中创建视图,让他呈现出来,并连接我们展示的HTML页面。

如何仿照djangoadmin风格渲染自己写的网站

查看admin页面源码,找标签的id和class,然后去link的.css文件里面找样式.

接着复制这个css文件到自己项目里面,将id和class换掉即可.

结语:以上就是首席CTO笔记为大家整理的关于如何复制django的全部内容了,感谢您花时间阅读本站内容,希望对您有所帮助,更多关于如何复制django的相关内容别忘了在本站进行查找喔。