WTForms StringField Dynamic Default Value using datetime.utcnow / Callable?
I have a WTForm with the following:
class MyForm(FlaskForm):
...
timestamp = DateTimeField("Timestamp", default = datetime.utcnow, validators = [Required()])
name = StringField("Name", default = str(int(datetime.utcnow().timestamp())), validators = [Optional()])
...
Upon creating a new form the default timestamp field updates as expected while the default name field continues to use the timestamp of when the app was started. I can successfully set the timestamp in my route, my preference is to utilize the default functionality of the form. Looking here:
The Field base class
It states that default "May be a callable." but I haven't been able to find a working example of this. I'm assuming if I make this a callable, the default value will update with current timestamp. Does anyone know how to make default get its value from a function?
Thanks in advance,
Brian
python flask flask-wtforms wtforms
add a comment |
I have a WTForm with the following:
class MyForm(FlaskForm):
...
timestamp = DateTimeField("Timestamp", default = datetime.utcnow, validators = [Required()])
name = StringField("Name", default = str(int(datetime.utcnow().timestamp())), validators = [Optional()])
...
Upon creating a new form the default timestamp field updates as expected while the default name field continues to use the timestamp of when the app was started. I can successfully set the timestamp in my route, my preference is to utilize the default functionality of the form. Looking here:
The Field base class
It states that default "May be a callable." but I haven't been able to find a working example of this. I'm assuming if I make this a callable, the default value will update with current timestamp. Does anyone know how to make default get its value from a function?
Thanks in advance,
Brian
python flask flask-wtforms wtforms
add a comment |
I have a WTForm with the following:
class MyForm(FlaskForm):
...
timestamp = DateTimeField("Timestamp", default = datetime.utcnow, validators = [Required()])
name = StringField("Name", default = str(int(datetime.utcnow().timestamp())), validators = [Optional()])
...
Upon creating a new form the default timestamp field updates as expected while the default name field continues to use the timestamp of when the app was started. I can successfully set the timestamp in my route, my preference is to utilize the default functionality of the form. Looking here:
The Field base class
It states that default "May be a callable." but I haven't been able to find a working example of this. I'm assuming if I make this a callable, the default value will update with current timestamp. Does anyone know how to make default get its value from a function?
Thanks in advance,
Brian
python flask flask-wtforms wtforms
I have a WTForm with the following:
class MyForm(FlaskForm):
...
timestamp = DateTimeField("Timestamp", default = datetime.utcnow, validators = [Required()])
name = StringField("Name", default = str(int(datetime.utcnow().timestamp())), validators = [Optional()])
...
Upon creating a new form the default timestamp field updates as expected while the default name field continues to use the timestamp of when the app was started. I can successfully set the timestamp in my route, my preference is to utilize the default functionality of the form. Looking here:
The Field base class
It states that default "May be a callable." but I haven't been able to find a working example of this. I'm assuming if I make this a callable, the default value will update with current timestamp. Does anyone know how to make default get its value from a function?
Thanks in advance,
Brian
python flask flask-wtforms wtforms
python flask flask-wtforms wtforms
edited Nov 24 '18 at 15:46
snakecharmerb
10.6k42250
10.6k42250
asked Nov 23 '18 at 17:36
FaivreFaivre
154
154
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
In your timestamp field, you provide a callable - datetime.datetime.utcnow to default, so each time the form is instantiated the callable is called and the new result is used.
In your name field, datetime.datetime.utcnow().timestamp() is evaluated when the form is compiled, so the default value is the same for every instance of the form.
If you want the default value of name to be evaluated every time the form is instantiated, pass it a function (a callable) that returns datetime.datetime.utcnow().timestamp().
Like this:
def get_default():
datetime.datetime.utcnow().timestamp()
class MyForm(FlaskForm):
timestamp = DateTimeField("Timestamp", default=datetime.utcnow, validators=[Required()])
name = StringField("Name", default=get_default, validators=[Optional()])
or if you prefer, you can use a lambda:
class MyForm(FlaskForm):
timestamp = DateTimeField("Timestamp", default=datetime.utcnow, validators=[Required()])
name = StringField("Name", default=lambda : datetime.datetime.utcnow().timestamp(), validators=[Optional()])
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53450930%2fwtforms-stringfield-dynamic-default-value-using-datetime-utcnow-callable%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
In your timestamp field, you provide a callable - datetime.datetime.utcnow to default, so each time the form is instantiated the callable is called and the new result is used.
In your name field, datetime.datetime.utcnow().timestamp() is evaluated when the form is compiled, so the default value is the same for every instance of the form.
If you want the default value of name to be evaluated every time the form is instantiated, pass it a function (a callable) that returns datetime.datetime.utcnow().timestamp().
Like this:
def get_default():
datetime.datetime.utcnow().timestamp()
class MyForm(FlaskForm):
timestamp = DateTimeField("Timestamp", default=datetime.utcnow, validators=[Required()])
name = StringField("Name", default=get_default, validators=[Optional()])
or if you prefer, you can use a lambda:
class MyForm(FlaskForm):
timestamp = DateTimeField("Timestamp", default=datetime.utcnow, validators=[Required()])
name = StringField("Name", default=lambda : datetime.datetime.utcnow().timestamp(), validators=[Optional()])
add a comment |
In your timestamp field, you provide a callable - datetime.datetime.utcnow to default, so each time the form is instantiated the callable is called and the new result is used.
In your name field, datetime.datetime.utcnow().timestamp() is evaluated when the form is compiled, so the default value is the same for every instance of the form.
If you want the default value of name to be evaluated every time the form is instantiated, pass it a function (a callable) that returns datetime.datetime.utcnow().timestamp().
Like this:
def get_default():
datetime.datetime.utcnow().timestamp()
class MyForm(FlaskForm):
timestamp = DateTimeField("Timestamp", default=datetime.utcnow, validators=[Required()])
name = StringField("Name", default=get_default, validators=[Optional()])
or if you prefer, you can use a lambda:
class MyForm(FlaskForm):
timestamp = DateTimeField("Timestamp", default=datetime.utcnow, validators=[Required()])
name = StringField("Name", default=lambda : datetime.datetime.utcnow().timestamp(), validators=[Optional()])
add a comment |
In your timestamp field, you provide a callable - datetime.datetime.utcnow to default, so each time the form is instantiated the callable is called and the new result is used.
In your name field, datetime.datetime.utcnow().timestamp() is evaluated when the form is compiled, so the default value is the same for every instance of the form.
If you want the default value of name to be evaluated every time the form is instantiated, pass it a function (a callable) that returns datetime.datetime.utcnow().timestamp().
Like this:
def get_default():
datetime.datetime.utcnow().timestamp()
class MyForm(FlaskForm):
timestamp = DateTimeField("Timestamp", default=datetime.utcnow, validators=[Required()])
name = StringField("Name", default=get_default, validators=[Optional()])
or if you prefer, you can use a lambda:
class MyForm(FlaskForm):
timestamp = DateTimeField("Timestamp", default=datetime.utcnow, validators=[Required()])
name = StringField("Name", default=lambda : datetime.datetime.utcnow().timestamp(), validators=[Optional()])
In your timestamp field, you provide a callable - datetime.datetime.utcnow to default, so each time the form is instantiated the callable is called and the new result is used.
In your name field, datetime.datetime.utcnow().timestamp() is evaluated when the form is compiled, so the default value is the same for every instance of the form.
If you want the default value of name to be evaluated every time the form is instantiated, pass it a function (a callable) that returns datetime.datetime.utcnow().timestamp().
Like this:
def get_default():
datetime.datetime.utcnow().timestamp()
class MyForm(FlaskForm):
timestamp = DateTimeField("Timestamp", default=datetime.utcnow, validators=[Required()])
name = StringField("Name", default=get_default, validators=[Optional()])
or if you prefer, you can use a lambda:
class MyForm(FlaskForm):
timestamp = DateTimeField("Timestamp", default=datetime.utcnow, validators=[Required()])
name = StringField("Name", default=lambda : datetime.datetime.utcnow().timestamp(), validators=[Optional()])
answered Nov 24 '18 at 15:45
snakecharmerbsnakecharmerb
10.6k42250
10.6k42250
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53450930%2fwtforms-stringfield-dynamic-default-value-using-datetime-utcnow-callable%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown