當前位置:首頁 » 數據倉庫 » django表單資料庫
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

django表單資料庫

發布時間: 2022-09-19 16:11:18

❶ django 編輯表單,數據怎麼回顯呀

如果我沒有理解錯誤,這個很基本啊。在python教程里就有。所以我想你應該是對django還不熟悉。看看它官網上的那個教程。英文的,仔細,耐心些邊看邊練,看完它。

簡單說django通過設置model將資料庫的數據可以方便的通過class.objects.all這樣的方法拿到,也可以使用get和filter等。拿到數據後,它存在model里的類的對象里。然後你將這個變數傳遞到template里去。在template里再將變數顯示在html里。

通過HttpResponse這樣的對象再將html返回給瀏覽器。

還有一種略簡潔的方法,但是原理一樣。裡面有一個form對象,可以簡化模板的使用,讓傳遞變數更簡單,不過做起model來,就更復雜一些。

❷ 在django form裡面要怎麼顯示資料庫中已有的數據,並更新數據

最簡單的辦法是。為資料庫的表建立一個model。具體做法是這樣子。
1.在settings.py里設置資料庫連接方式。連接錯誤後面都沒有辦法
2.在models設置一個資料庫表的對應數據結構,通常叫關系對象模型,所以叫model,它就是一個類。你可以用django-admin.py ...probe,似乎是這個命令,就是一個資料庫的探測命令,可以根據表,自動生成model的代碼。當然如果你先寫了model的代碼就可以用syncdb命令生成資料庫的表
3.在urls.py里設置一個URL的path,當瀏覽器訪問這個path時就可以打開對應的view中的函數
4.在view里
4.1 result=modelclass.objects.all()這個命令可以取出所有的記錄
4.2 然後你可以直接將結果傳遞給模板。由模板顯示。這是最合理的辦法

4.3 在模板里 {% for cols in result %}
4.4 <li>cols.field1</li>
大約就是這樣子。可能說的太粗。你對著教程看就知道了。

❸ django 怎麼從資料庫讀數據,成為表單默認值

django
怎麼從資料庫讀數據,成為表單默認值
最簡單的辦法是。為資料庫的表建立一個model。具體做法是這樣子。
1.在settings.py里設置資料庫連接方式。連接錯誤後面都沒有辦法
2.在models設置一個資料庫表的對應數據結構,通常叫關系對象模型,所以叫model,它就是一個類。你可以用django-admin.py
...probe,似乎是這個命令,就是一個資料庫的探測命令,可以根據表,自動生成model的代碼。當然如果你先寫了model的代碼就可以用syncdb命令生成資料庫的表

❹ django 怎麼從資料庫讀數據,成為表單默認值

最簡單的辦法是。為資料庫的表建立一個model。具體做法是這樣子。
1.在settings.py里設置資料庫連接方式。連接錯誤後面都沒有辦法
2.在models設置一個資料庫表的對應數據結構,通常叫關系對象模型,所以叫model,它就是一個類。你可以用django-admin.py ...probe,似乎是這個命令,就是一個資料庫的探測命令,可以根據表,自動生成model的代碼。當然如果你先寫了model的代碼就可以用syncdb命令生成資料庫的表
3.在urls.py里設置一個URL的path,當瀏覽器訪問這個path時就可以打開對應的view中的函數
4.在view里
4.1 result=modelclass.objects.all()這個命令可以取出所有的記錄
4.2 然後你可以直接將結果傳遞給模板。由模板顯示。這是最合理的辦法

4.3 在模板里 {% for cols in result %}
4.4 <li>cols.field1</li>
大約就是這樣子。可能說的太粗。你對著教程看就知道了。

❺ 在django 的app裡面新建了一個forms.py文件,請問怎麼把這個文件綁定到資料庫

forms文件和資料庫沒關系,有關資料庫的代碼都卸載models文件中了,只能簡歷forms和models的關系,在forms文件中的form裡面添加
內部類
Meta,Meta包含屬性model指向對應model

❻ Django中將一個文本框中的數據通過點擊按鈕保存到資料庫

可以在template中寫一個form提交形式為post,在view中通過request.Post()讀取相應的數據,再通過update或者是create(這個查一下對應資料庫操作),按照這個順序就可以了。
或者是使用Python寫一個form表單,在template中使用{{forms.a_p}}等格式的輸出,在view中對應更新數據,也可以。

❼ django 怎麼將表單上的數據寫到資料庫里

首先,在views中需要判斷你的form合不合法(不合法請查看InputForm與輸入的是否符合),可以在if form.is_valid():並列的地方添加一個else,print form看看,可以類似form.company.errors.其實如果合法要存到資料庫中,你的model方法有問題,一般是add_input=Input(xx=xx,xx=xx)
add_input.save()
或者Input.objects.create(xx=xx=,xx=xx)#並不需要賦值,和調用save()方法,因為create內部有調用save方法

❽ django咋樣接收ip發來的數據並存入mysql

django通過for循環拿到post表單中的值並保存到一個dict中,然後通過**dict保存到資料庫中。1.用戶提交了一個表單,表單內容包含csrf。2.服務端除了表單中的csrf要過濾掉,其它的都要保存到資料庫中。

❾ 我是怎麼做到使用django動態定義表單的

第一節 數據結構

最近的項目開發,用到了這樣的數據結構:
主要是來管理設備的.
下面我列一下它簡化的結構,不需要更多了,其餘的只是多餘或者說是錦上添花:
設備分類(相當於設備的大分類)的數據結構:

[python] view plain
class Category(models.Model):
name = models.CharField(max_length=40)

具體設備的數據結構:

[python] view plain
class Equipment(models.Model):
name = models.CharField(max_length=100)
category = models.ForeignKey(Category, related_name="cg_equip_list")

設備參數的數據結構:

[python] view plain
class Characteristic(models.Model):
category = models.ForeignKey(Category, related_name="eq_characteristics")
name = models.CharField(max_length=40)

設備參數的值的數據結構:

[python] view plain
class CharacteristicValue(models.Model):
equipment = models.ForeignKey(Equipment, related_name="eq_characteristic_values")
characteristic = models.ForeignKey(Characteristic, related_name="eq_key_values")
value = models.CharField(max_length=100)

可能好多人會問:你怎麼不把設備的參數值直接定義到設備的數據結構中去呢?
我的回答就是:這樣可以自己定義更多的設備.
每個設備的參數是不一樣的,比如說電腦的參數基本上就是:
CPU頻率,內存大小,硬碟大小,顯示器類型,顯示器大小等等.
而列印機的參數可以這樣:
最大列印紙張幅面,列印機類型等等.
這樣兩種有著不同參數的設備該怎麼將它們的數據保存至資料庫中呢?
按照剛才上面的提問,我們將需要建立2個表,電腦表和列印機表,分別包含相應的參數在列中.這樣的話,如果再多一種設備,比如照相機,我們又得多建立一張數據表,而疲於維護資料庫了.
但是按照參數與設備分離,以參數表的形式定義各類設備的參數,以外鍵鏈接到設備分類表.
再將具體設備的各項參數的值放入參數值表中,就可以保存各個設備的參數了.
參數值的數據表中,一個參數屬於哪個設備,主要根據設備的id,和參數的id來確定.
這樣的表結構就相對來說比較通用.
比較麻煩的就是,增加一個設備的時候,同時要增加它相應的參數值,它的參數不在設備表中,這樣就要通過參數表來查詢:
在參數表中,參數的設備分類id=具體設備的所屬設備分類id的行就是該設備所擁有的參數.
比如說:
設備分類表中數據:
id name
1 台式計算機
2 列印機
參數在參數表中保存了以下幾行數據:
id name category
1 CPU頻率 1
2 MAC地址 1
3 內存大小 1
4 顯示器大小 1
5 顯示器類型 1
6 硬碟大小 1
7 最大列印幅面 2
可以一目瞭然的看出台式計算機有6個參數,列印機有1個參數.
第二節 解決方案的選用

數據結構搞清楚了,現在的問題是怎麼錄入這些參數的值呢?
困難在於,每種設備的參數的個數是不確定的,因此,在定義form的時候,我們不能固定的定死form的 field個數,只有動態的增減field的個數.
那麼,怎麼動態生成一個有不同數目field的form呢?
這里,我的想法就是,既然參數個數保存在資料庫中了,那麼肯定是要查詢資料庫來動態生成了.
那麼,使用django,該用什麼具體的方法呢?
我自己是試過不少的方法的,也是在調試的過程中慢慢找到了解決這個問題的方法.
過程是這樣的:
我開始想的解決的方案有:
1.使用ajax來動態的生成form
2.使用admin中的方法,用inline的 方法,在增加一個設備的同時增加幾個參數
3.使用formset來製作
4.使用formtools中的formwizard(表單向導)來製作.
問題的困境主要在於參數值的表中有2個外鍵,所以不好確定該怎麼弄.
前面三種方法我僅僅試了一下,調試了一兩天就放棄了,主要原因就是:
1.ajax我目前還是不太熟,要想用好它,又得轉向去學習一些相關的javascript庫,一時半會弄不好.
2.admin中的inline是針對一種數據model的,增加的參數值也是相同的,比如說可能增加成6個CPU參數.而且是用在admin中的,想摳出來自己使用還挺麻煩的.
3.formset中的form也是要求相同的數據模型,但是參數值表中2個外鍵高的你根本沒法使用formset,formset是在簡單的數據結構情況下錄入數據用的.
formset有一個函數就是add_fields,這個函數比較有用,但是form沒有這個函數.了解了原理就簡單了,就是form['field_name']=forms.CharField()之類就可以為一個form 實例添加field了.
我覺得formset是可以解決問題的,但是前提是構造formset前,必須提前知道formset中有幾個參數值的form在裡面(就是要知道某種分類的設備有幾個參數,好在formset中構建幾個form,CharacteristicValue的form,每個form採用不同的參數來進行初始化initial).
在一個頁面中,先增加設備的form,因為設備的參數個數不是固定的,需要動態的增加含有幾個參數值表單的formset,這樣就可以選擇設備的參數了.formset比較適用於使用固定個數的form.所以這樣就給使用formset增加了難度,如果要讓這種方式能夠使用,最終還是要用到ajax來根據用戶選擇設備類型的時候,動態的生成formset.
formset需要在view中初始化.
所以這種方式我沒有採用.
我採用的是表單向導的方式.
django的contrib中提供了formtools,用過了,會用了才覺得真好用.我是看英文文檔一點一滴的學會使用的,感覺真的很方便.
但是上面的4的解決方案的實現過程倒是很艱難的.我弄了3天才弄出點眉目來.
第三節 具體的實現
django中表單向導使用起來很簡單的.
[python] view plain
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] view plain
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有多少個,是否修改成功.

❿ django2.0,實現搜索資料庫數據並顯示在網頁的功能

我沒環境,不方便幫你寫代碼,但可以告訴你思路:

  1. 你想用ajax方式查數據,第一步,你已經獲取到了輸入表單的的值,這很好。

  2. 第二步,你需要添加一個查詢介面路由,和view,用來返回查詢到後數據。

  3. 第三步,讓前端js代碼,用ajax的方式,請求你添加的查詢路由地址,帶上參數。

  4. 第四步,在路由對應的view代碼中,獲取通過url請求傳過來的參數。

  5. 第五步,在view代碼中,對參數進行檢查,通過後,調用數據查詢方法,獲取結果集。

  6. 第六步,在view代碼中,將結果集轉為json(一般是json),返回。

  7. 第七步,ajax在收到返回結果後,將數據顯示在網頁中。

  8. 第八步,調整數據顯示的樣式,使之美觀一點。

  9. 如有不明可以追問,或私信留言。