0
我試圖在beego中提交表單數據並將其存儲到數據庫中。並有一些問題:在beego中處理表單提交的正確方法是什麼?
- 如何正確處理請求並將其轉換爲對象?
- 我應該驗證請求還是轉換對象?
我的控制器動作:
func (c *ServicesController) Edit() {
var err error
var id, _ = c.GetUint64(":id")
var serviceModel = models.Service{}
var service models.Service
service, err = serviceModel.FindById(id)
c.Data["Service"] = service
if err == orm.ErrNoRows || err == orm.ErrMissPK {
c.Abort("404")
}
if c.Ctx.Input.IsPost() {
err = nil
if err := c.ParseForm(&service); err != nil {
c.Abort("500")
}
serviceModel.CreateOrUpdate(service)
}
c.TplName = "services/edit.html"
}
型號:
type Service struct {
Id uint64 `form:"-"`
Name string `orm:"size(100)" valid:"Required; MaxSize(100)" form:"name"`
}
func init() {
orm.RegisterModel(new(Service))
}
func (s *Service) FindById(id uint64) (Service, error) {
o := orm.NewOrm()
service := Service{Id: id}
err := o.Read(&service)
return service, err
}
func (s *Service) CreateOrUpdate(service Service) {
o := orm.NewOrm()
o.InsertOrUpdate(&service)
}
但是,當我試圖提交表單(與InsertOrUpdate
)也無妨創建新的對象,因爲我沒有id字段在窗體中(因爲我從路由ID參數中檢索對象)。我是否應該通過id來形成或如何破解它?
我也想一想,但它不醜嗎?我從數據庫中獲取對象並將表單數據應用到它。爲什麼它會覆蓋不在表單中的ID? –
你不得不向我們展示你的'ParseForm'方法,我不知道它爲什麼會覆蓋它的方法 – dave
這不是我的,它來自beego –