日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

stark组件开发之添加功能实现

發(fā)布時間:2025/7/14 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 stark组件开发之添加功能实现 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

添加功能,還是使用, form 組件來完成!? 并且 完成添加之后,需要保留原搜索條件。

def memory_url(self):'''用于反向生成url, 并且攜帶,get請求的參數(shù),跳轉(zhuǎn)到下一個網(wǎng)頁'''name = "%s:%s" % (self.site.namespace, self.get_add_url_name)base_url = reverse(name)# 記錄原搜索條件if not self.request.GET:add_url = base_urlelse:param = self.request.GET.urlencode() # 獲取到GET請求的,所有的參數(shù)。 ?page=1&age=20new_query_dict = QueryDict(mutable=True)new_query_dict["_filter"] = paramadd_url = "%s?%s" % (base_url, new_query_dict.urlencode())return add_url

通過這個函數(shù), 已經(jīng)在。 展示頁面, 為 添加按鈕,指定了? URL。
進(jìn)入添加頁面之后, 已經(jīng)攜帶著,? 展示頁面的 GET 請求的信息。 進(jìn)入了 添加頁面。
那么,添加完成之后。 跳轉(zhuǎn)回, 展示頁面的時候。 也需要將 GET 信息。 原封不動的,帶回 展示頁面。
先看? 添加頁面的 基礎(chǔ)需求:
因為,所有的添加頁面, 都是使用的同一個 模板。 來完成。。。? 可以使用 form 組件來完成這件事。

model_form_class = None # 預(yù)留自定義接口def get_model_form_class(self):if self.model_form_class:return self.model_form_classclass DynamicModelForm(StarkModelForm):class Meta:model = self.model_classfields = "__all__"return DynamicModelForm

因為在基類中, 初始化函數(shù)中, 定義了? model_class? 這個就是, 各自的 模型表的類。

默認(rèn)顯示? “__all__"??? 并返回。 這個form 類。? 并且預(yù)留了接口。 model_form_class

看一看: 添加的視圖:

def add_view(self, request):'''添加頁面:param request::return:'''model_form_class = self.get_model_form_class()if request.method == "GET":form = model_form_class()return render(request, "stark/change.html", {"form": form})form = model_form_class(data=request.POST)if request.method == "POST":if form.is_valid():# form.save()return redirect(self.memory_reverse())return render(request, "stark/change.html", {"form": form})

可以看到, 再添加的視圖中。 我們通過調(diào)用self.get_model_form_class()? 來得到。 form 類。 并傳遞給了 模板。
當(dāng)預(yù)留的接口,沒有值得時候, 使用得就是,默認(rèn)得全部顯示。|

如果需要,進(jìn)行自定制,也是可以的。? 這就需要在。 子類中為? model_form_class = None 這個預(yù)留得接口。 為他賦一個值。
這個值,就是一個。 自己重寫之后得,form 類。

比如: 在原來得基礎(chǔ)上。 再添加上一個字段。

class UserInfoModelForm(StarkModelForm):xx = forms.CharField()class Meta:model = models.UserInfofields = "__all__"class UserInfoHandler(StartHandler):list_display = ["name", "age", "depart", get_choice_txt("性別", "gender"), StartHandler.display_edit,StartHandler.display_del]per_page = 1 # 重訂 每頁顯示 多少 數(shù)據(jù)has_add_btn = Truemodel_form_class = UserInfoModelForm

寫一個form類。 并且多了一個? xx 得字段。
然后將這個類, 賦值給了 model_form_class?? 這樣。 對象再去找這個變量得時候。 因為優(yōu)先找自己得類, 也就是? UserInfoHandler
發(fā)現(xiàn)有這個? model_form_class? ,然后他就會使用這個變量。
在調(diào)用self.get_model_form_class() 得時候。 內(nèi)部進(jìn)行了判斷。 這個model_form_class 不為空。 就直接 return 了 model_form_class
這樣,在 添加視圖中, 接收到得, 就是。 添加了 xx 字段得 。 這個 form 類。
在頁面顯示得 時候。 就能夠,看到這個類!

添加字段可以了。 那么如何減少一個字段呢?

class UserInfoModelForm(StarkModelForm):class Meta:model = models.UserInfofields = ["name", "gender", "age", "depart"] # 原本全部的話 是需要再增加一個 pwd 的。

fields? 不再 使用? "__all__"? 而是自己指定。 想要顯示得字段。
但是,有一個問題就是。 不顯示這個字段。 表示用戶不能進(jìn)行輸入這個字段。
那么數(shù)據(jù)庫在進(jìn)行保存得時候, 這個字段,沒有值, 他該怎么個保存??? 這樣就必須提供一個默認(rèn)得值

也就是說,現(xiàn)實的時候雖然收一個字段, 但是保存得時候,必須提供一個默認(rèn)得值:
所以在添加視圖函數(shù)中,再保存的,時候,我需要一個可以自定制的,保存功能。
先看代碼基類的代碼, 為了支持自定制的功能。 在基類中新增一個函數(shù) save()? 這個函數(shù)默認(rèn)使用 form.save():

StarkHandel(objects):
  .............

  def save(self, form, is_update=False):form.save()def add_view(self, request):'''添加頁面:param request::return:'''model_form_class = self.get_model_form_class()if request.method == "GET":form = model_form_class()return render(request, "stark/change.html", {"form": form})form = model_form_class(data=request.POST)if request.method == "POST":if form.is_valid():
           # 這里不再使用 form.save() 而是使用類中的save()函數(shù)。讓這個方法去幫我保存。
         # 這樣的話,我在子類中,就可以進(jìn)行。重寫 save 這個方法。 從而實現(xiàn),我想要默認(rèn)保存的 哪個字段self.save(form, is_update
=False)return redirect(self.memory_reverse())return render(request, "stark/change.html", {"form": form})
  ............... class UserInfoModelForm(StarkModelForm):class Meta:model = models.UserInfofields = ["name", "gender", "age", "depart"]class UserInfoHandler(StartHandler):list_display = ["name", "age", "depart", get_choice_txt("性別", "gender"), StartHandler.display_edit,StartHandler.display_del] model_form_class = UserInfoModelFormdef save(self, form, is_update=False):form.instance.pwd = 123 # 通過instance 為想要的 字段。 制定一個默認(rèn)的保存 值。 我這里為 pwd 字段 默認(rèn)保存 123form.save() # 然后在這里進(jìn)行 保存的工作。

這樣就可以為 一張表,進(jìn)行自定制的,保存工作。? 并且只有 UserInfoHandler? 這個子類,重寫了 save 方法。

其他的子類。沒有重寫這個方法。 所以在不同的對象再找的時候, 之后UserInfoHandler? 的對象,能夠找到自己的 save 函數(shù)。 其他的依然使用的是, 父類的 save 函數(shù)。

這樣, 就不會相互的影響。

?

轉(zhuǎn)載于:https://www.cnblogs.com/chengege/p/10741154.html

總結(jié)

以上是生活随笔為你收集整理的stark组件开发之添加功能实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。