我有以下代码:
category = forms.ModelMultipleChoiceField(
label="Category",
queryset=Category.objects.order_by('name'),
widget=forms.Select(
attrs={
'placeholder': 'Product Category', 'class': 'form-control'}),
required=True
)
Run Code Online (Sandbox Code Playgroud)
如何在选择框中设置初始值,如"选择一个类别",以便选择框应该有一个类别列表,其初始值为"选择一个类别"
我正在开发一个用CMake构建的项目,所以我正在CMakeLists.txt为它编写一个.在这个文件中,我想要一个(缓存的)CMake变量,它只能采用几个选项之一(我会以某种方式指定),而不是任意字符串.为简单起见,让我们把它变成一个可以采用"红色","绿色"或"蓝色"的字符串 - 但没有别的.
我可以使用最近的CMake版本来实现这一点,除了设置任意字符串然后检查其有效性吗?
我正在尝试构建一个MultipleChoiceFilter选项,其中的选择是相关模型(DatedResource)上可能存在的日期的集合。
到目前为止,这是我正在使用的东西...
resource_date = filters.MultipleChoiceFilter(
field_name='dated_resource__date',
choices=[
(d, d.strftime('%Y-%m-%d')) for d in
sorted(resource_models.DatedResource.objects.all().values_list('date', flat=True).distinct())
],
label="Resource Date"
)
Run Code Online (Sandbox Code Playgroud)
当它显示在html视图中时...
最初,这很好用,但是,如果我创建DatedResource具有新的不同date值的新对象,则需要重新启动我的Web服务器,以使它们成为此过滤器中的有效选择。我相信这是因为该choices列表是在Web服务器启动时进行一次评估的,而不是在每次我的页面加载时进行评估的。
有什么办法可以解决这个问题?也许通过一些创造性的使用ModelMultipleChoiceFilter?
谢谢!
编辑:
我尝试了一些简单的ModelMultipleChoice用法,但遇到了一些问题。
resource_date = filters.ModelMultipleChoiceFilter(
field_name='dated_resource__date',
queryset=resource_models.DatedResource.objects.all().values_list('date', flat=True).order_by('date').distinct(),
label="Resource Date"
)
Run Code Online (Sandbox Code Playgroud)
HTML表单显示得很好,但是选择不是过滤器可接受的值。我"2019-04-03" is not a valid value.假设收到验证错误,因为此过滤器需要datetime.date对象。我考虑过使用coerce参数,但是ModelMultipleChoice过滤器不接受这些参数。
根据狄克格罗滕的评论,我尝试使用链接问题中的建议。最终像
resource_date = filters.ModelMultipleChoiceFilter(
field_name='dated_resource__date',
to_field_name='date',
queryset=resource_models.DatedResource.objects.all(),
label="Resource Date"
)
Run Code Online (Sandbox Code Playgroud)
这也不是我想要的,因为HTML现在的形式是:a)显示str每个的表示形式DatedResource,而不是DatedResource.date字段; …
django django-filters multiplechoicefield modelmultiplechoicefield
我有一个带有两个多重选择字段的表单 LabelingForm() ,我希望设置必需的 - 参数,以便在按下按钮 A 和 B 时它为 False,但在按下按钮 C 时为 True。我尝试过初始 = False 和 required = True但它不起作用,按下按钮 A 时需要进行字段选择。
在 forms.py 中
class LabelingForm(forms.Form):
First_choices = (('1',''),
.....
)
First_choice = forms.MultipleChoiceField(choices=First_choices, initial=True,required=True)
Second__choices = (('1',''),
.....
)
Second_choice = forms.MultipleChoiceField(choices=Second_choices, initial=True,required=True)
Run Code Online (Sandbox Code Playgroud)
在views.py中
def function(request, postID):
if request.method == 'POST':
form = LabelingForm(request.POST)
if form.is_valid():
if "A" in request.POST:
# required is false
if "B" in request.POST:
# required is false
if "C" in request.POST:
# required is …Run Code Online (Sandbox Code Playgroud) 我有一个调用我的django应用程序的javascript应用程序(角度).它使用整数列表来过滤响应.在Django中,我使用表单来清理数据.
使用Javascript:
app.factory('SearchData',
function(){
return {
shop:[],
sort:'',
xhr:'',
brand:[],
};
});
app.factory('SearchQuery',
['$http', '$location', '$route', 'SearchData',
function($http, $location, $route, SearchData){
return {
getItems: function(){
return $http.get('/search/',{
params: SearchData,
responseType: 'json',
});
}
};
}
]);
Run Code Online (Sandbox Code Playgroud)
Python形式:
class SearchForm(forms.Form):
shop = forms.IntegerField(widget=forms.SelectMultiple(),required=False)
sort = forms.CharField(max_length=1, min_length=1, required=False)
brand = forms.IntegerField(widget=forms.SelectMultiple(),required=False)
Run Code Online (Sandbox Code Playgroud)
我得到了商店和品牌的整数列表,但我不知道如何在django方面处理它.我不想使用MultipleChoiceField,因为我需要在表单中提供选择(这会创建一个不必要的查询).我想做的就是有一个整数列表.
上面的表单抛出"输入整数.".我可以放弃表单并使用request.GET.getlist('shop')(有效).但如果可能的话,我宁愿使用表格......
更新,现在我正在使用MultipleChoiceField并在视图中验证之前传递选项.喜欢:
shops = request.GET.getlist('shop', None)
sf = SearchForm(request.GET)
sf.fields['shop'].choices = shops
Run Code Online (Sandbox Code Playgroud)
它有效,但它不漂亮.
我有一个ManyToManyField,带有复选框显示.当我的布尔字段share_data等于1 时,应检查复选框.
这是代码:
class Participant(models.Model):
databases = models.ManyToManyField(Advertiser, null=True, blank=True, through='ShareDataToBrands')
@property
def share_to_brands_list(self):
brands=[]
for brand in ShareDataToBrands.objects.all():
brands.append((brand.advertiser.id, brand.advertiser.brand_name, brand.share_data))
return brands
class ShareDataToBrands(models.Model):
participant = models.ForeignKey(Participant, blank=False, null=False)
advertiser = models.ForeignKey(Advertiser, blank=False, null=False)
share_data= models.BooleanField(default=True)
def __str__(self):
return self.participant, self.advertiser, self.share_data
class ShareDataToBrandsForm(forms.ModelForm):
class Meta:
model = models.Participant
fields = ('databases', )
databases=forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple)
def __init__(self, *args, **kwargs):
super(ShareDataToBrandsForm, self).__init__(*args, **kwargs)
share_to_brands=self.instance.share_to_brands_list
self.fields['databases'].choices=self.fields['databases'].choices=[(brand[0], brand[1]) for brand in share_to_brands]
self.initial['databases']=[brand[2] for brand in share_to_brands]
print(self.initial['databases']) …Run Code Online (Sandbox Code Playgroud) django ×5
forms ×2
build ×1
checkbox ×1
cmake ×1
django-forms ×1
javascript ×1
list ×1
python ×1
required ×1