Django 1.11.4
我的代码如下。 问题是它只执行一次:在Django开始。 我希望人们在重新加载网页时续订。 你能帮我解决这个问题吗?
forms.py
def get_people_choices():
people = Person.objects.all()
choices = [(None, "----")]
choices += [(person.id, person) for person in people]
return choices
class SearchForm(forms.Form):
person_choice = forms.ChoiceField(label='', choices=get_people_choices(), required=False)
答案 0 :(得分:1)
您应该使用模型ModelChoiceField
回收代码。很简单,你的例子应该是这样的:
class SearchForm(forms.Form):
person_choice = forms.ModelChoiceField(queryset=Person.objects.all)
它将在您的模板中返回:
<select id="id_field1" name="field1">
<option value="person1.pk">person1</option>
<option value="person2.pk">person2</option>
...
</select>
如果您想更改该值,请添加(queryset=..., to_field_name="name")
,现在该值将是该人的姓名或您想要的任何内容。
如果您想查看更多check this
答案 1 :(得分:1)
最简单的解决方法是传递可调用的get_people_choices
,而不是在表单定义中调用它。
class SearchForm(forms.Form):
person_choice = forms.ChoiceField(label='', choices=get_people_choices, required=False)
这适用于Django 1.8+。对于早期版本,您必须覆盖__init__
方法,如Bear Brown的答案。
正如Mauricio所建议的那样,使用ModelChoiceField
可能是个更好的主意。
答案 2 :(得分:0)
您可以在字段中使用 static HttpClient client = new HttpClient();
public override void AwakeFromNib()
{
base.AwakeFromNib();
notif_button.Activated += (sender, e) => {
};
tips_button.Activated += (sender, e) =>
{
Tip t1 = new Tip(title_tips.StringValue, pic_tips.StringValue, content_tips.StringValue, "TEST");
client.BaseAddress = new Uri("my_url");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
CreateProductAsync(t1).Wait();
};
}
static async Task<Uri> CreateProductAsync(Tip tips)
{
HttpResponseMessage response = await client.PostAsJsonAsync("api/add_tips", tips);
response.EnsureSuccessStatusCode();
return response.Headers.Location;
}
:
__init__