如何在使用 gorm 插入时从结构中跳过特定字段

How can I skip a specific field from struct while inserting with gorm

我正试图休息 API 以进行用户注册,并且在那个 api 上有一个名为“性别”的字段,所以我收到该字段作为 Struct 但在用户 table 没有“性别”字段。是否可以在使用 gorm 插入时跳过结构中的“性别”字段?

这是我的数据模型

package DataModels

type User struct {
    Id          uint `json:"id"`
    Otp         int `json:"otp"`
    UserId      string `json:"user_id"`
    UserType    string `json:"user_type"`
    FullName    string `json:"full_name"`
    MobileNo    string `json:"mobile"`
    Email       string `json:"email"`
    Gender      string `json:"gender"` // I want to skip this filed while inserting to users table
    Password    string `json:"password"`
}

func (b *User) TableName() string {
    return "users"
}

这是我的控制器功能

func CreateUser(c *gin.Context) {
    var user Models.User
    _ = c.BindJSON(&user)
    err := Models.CreateUser(&user) // want to skip that gender filed while inserting
    if err != nil {
        fmt.Println(err.Error())
        c.AbortWithStatus(http.StatusNotFound)
    } else {
        c.JSON(http.StatusOK, user)
    }
}

这是我的插入模型函数

func CreateUser(user *User) (err error) {
    if err = Config.DB.Create(user).Error; err != nil {
        return err
    }
    return nil
}

GORM允许忽略带标签的字段,使用gorm:"-"忽略字段

type User struct {
    ...
    Gender   string `json:"gender" gorm:"-"` // ignore this field when write and read
}

有关 Field-Level Permission

的官方文档详细信息

Eklavyas 答案总是忽略性别,而不仅仅是在创建时。

如果我是对的,你想跳过注册中的性别字段。您可以为此使用 Omit

db.Omit("Gender").Create(&user)