uAdmin Tutorial Part 7 - M2M (Many-to-many) (Current Progress)¶
Structure:
models¶
category.go¶
package models
import (
"github.com/uadmin/uadmin"
)
// Category Model !
type Category struct {
uadmin.Model
Name string `uadmin:"required"`
Icon string `uadmin:"image"`
}
friend.go¶
package models
import (
"github.com/uadmin/uadmin"
)
// Nationality Field !
type Nationality int
// Chinese !
func (Nationality) Chinese() Nationality {
return 1
}
// Filipino !
func (Nationality) Filipino() Nationality {
return 2
}
// Others !
func (Nationality) Others() Nationality {
return 3
}
// Friend Model !
type Friend struct {
uadmin.Model
Name string `uadmin:"required"`
Email string `uadmin:"email"`
Password string `uadmin:"password;list_exclude"`
Nationality Nationality
Invite string `uadmin:"link"`
}
// Save !
func (f *Friend) Save() {
f.Invite = "https://www.google.com/"
uadmin.Save(f)
}
item.go¶
package models
import (
"strings"
"github.com/uadmin/uadmin"
)
// Item Model !
type Item struct {
uadmin.Model
Name string `uadmin:"required;search;categorical_filter;filter;display_name:Product Name;default_value:Computer"`
Description string `uadmin:"multilingual"`
Category []Category `uadmin:"list_exclude" gorm:"many2many:-"`
CategoryList string `uadmin:"read_only"`
Cost int `uadmin:"money;pattern:^[0-9]*$;pattern_msg:Your input must be a number.;help:Input numeric characters only in this field."`
Rating int `uadmin:"min:1;max:5"`
}
// Save !
func (i *Item) Save() {
// Add a new string array type variable called categoryList
categoryList := []string{}
// Append every element to the categoryList array
for c := range i.Category {
categoryList = append(categoryList, i.Category[c].Name)
}
// Concatenate the categoryList to a single string separated by comma
joinList := strings.Join(categoryList, ", ")
// Store the joined string to the CategoryList field
i.CategoryList = joinList
// Save it to the database
uadmin.Save(i)
}
todo.go¶
package models
import (
"time"
"github.com/uadmin/uadmin"
)
// Todo Model !
type Todo struct {
uadmin.Model
Name string
Description string `uadmin:"html"`
Category Category
CategoryID uint
Friend Friend `uadmin:"help:Who will be a part of your activity?"`
FriendID uint
Item Item `uadmin:"help:What are the requirements needed in order to accomplish your activity?"`
ItemID uint
TargetDate time.Time
Progress int `uadmin:"progress_bar"`
}
main.go¶
package main
import (
// Specify the username that you used inside github.com folder
"github.com/username/todo/models"
"github.com/uadmin/uadmin"
)
func main() {
// Register Models
uadmin.Register(
models.Todo{},
models.Category{},
models.Friend{},
models.Item{},
)
// Register Models
uadmin.RegisterInlines(models.Category{}, map[string]string{
"Todo": "CategoryID",
})
uadmin.RegisterInlines(models.Friend{}, map[string]string{
"Todo": "FriendID",
})
uadmin.RegisterInlines(models.Item{}, map[string]string{
"Todo": "ItemID",
})
uadmin.StartServer()
}