如何在GORM中正确创建外键 Golang应用程序?

In PostgreSQL database I have 2 table:

CREATE TABLE WIDGET_TYPE(
    WIDGET_TYPE_ID SERIAL PRIMARY KEY NOT NULL,
    WIDGET_TYPE_NAME VARCHAR NOT NULL UNIQUE
);

CREATE TABLE QUESTION(
    QUESTION_ID SERIAL PRIMARY KEY NOT NULL,
    QUESTION_TEXT TEXT NOT NULL UNIQUE,
    WIDGET_TYPE_ID INT NOT NULL,
    FOREIGN KEY (WIDGET_TYPE_ID) REFERENCES WIDGET_TYPE (WIDGET_TYPE_ID)
);

As you can see each question has only one widget type for offerend answers.

After that step I am trying to design models in Golang application. I use GORM library for this task. I have problem when try to create new entry in question table. In the body of the POST request I send JSON object:

{
    "question_text": "NEW QUESTION TEXT HERE",
    "widget_type_id": 2
}

ERROR:

pq: insert or update on table "question" violates foreign key constraint "question_widget_type_id_fkey"

models.go:

package models

type WidgetType struct {
    WidgetTypeID   int    `gorm:"primary_key" json:"widget_type_id"`
    WidgetTypeName string `gorm:"not null;unique" json:"widget_type_name"`
}

func (WidgetType) TableName() string {
    return "widget_type"
}

type Question struct {
    QuestionID int `gorm:"primary_key" json:"question_id"`
    QuestionText string `gorm:"not null;unique" json:"question_text"`
    WidgetType WidgetType `gorm:"foreignkey:WidgetTypeID"`
    WidgetTypeID uint
}

func (Question) TableName() string {
    return "question"
}

handlers.go:

var CreateQuestion = func(responseWriter http.ResponseWriter, request *http.Request) {
    question := models.Question{}
    decoder := json.NewDecoder(request.Body)
    if err := decoder.Decode(&question); err != nil {
        utils.ResponseWithError(responseWriter, http.StatusBadRequest, err.Error())
        return
    }
    defer request.Body.Close()
    if err := database.DBGORM.Save(&question).Error; err != nil {
        utils.ResponseWithError(responseWriter, http.StatusInternalServerError, err.Error())
        return
    }
    utils.ResponseWithSuccess(responseWriter, http.StatusCreated, "The new entry successfully created.")
}

Where I make mistake?

I add built-in logger support of GORM. In console it show me next SQL statement:

INSERT INTO "question" ("question_text","widget_type_id") VALUES ('NEW QUESTION TEXT HERE',0) RETURNING "question"."question_id"

As you can see widget_type_id value 0. WHY?