我有表格可以打印表格中的所有记录(比如说数据库中的' item'表格)。用户可以使用ajax将新项添加到db。数据保存到数据库正确,但当我刷新页面时,我在多选框中看不到新标签。
我认为缓存是一个问题,但它没有。
所以我有疑问:我可以看到哪个问题添加正确的记录但是当我刷新同一页面时,每次都从表格中选择所有行,那么我不会看到这些新记录?
我正在使用sqlite及其开发服务器。
Forms.py:
BLANK_CHOICE = (('', '---------'),)
class OrderCreateForm(forms.ModelForm):
tag_from = forms.MultipleChoiceField(label='Tags', choices=OrderItemList.objects.all().values_list('id', 'name'))
tag_to = forms.MultipleChoiceField()
class Meta:
model = Order
fields = ('price', 'client', 'platform')
def __init__(self, request_client_id, *args, **kwargs):
super(OrderCreateForm, self).__init__(*args, **kwargs)
self.fields['platform'].choices = BLANK_CHOICE + tuple(
Platform.objects.filter(client_id=request_client_id).values_list('id', 'name'))
View.py:
@user_passes_test(lambda u: u.is_staff, login_url='/account/login/')
def order_create(request, request_client_id):
dict = {}
dict['form_order'] = OrderCreateForm(request_client_id)
return render(request, 'panel/order/form.html', dict)
答案 0 :(得分:2)
问题是您在字段定义中设置了tag_from
选项,因此在首次加载表单时会对选项进行一次评估。您可以通过在__init__
方法中设置选项来解决问题。
class OrderCreateForm(forms.ModelForm):
tag_from = forms.MultipleChoiceField(label='Tags', choices=())
...
def __init__(self, request_client_id, *args, **kwargs):
super(OrderCreateForm, self).__init__(*args, **kwargs)
self.fields['tag_from'].choices = OrderItemList.objects.all().values_list('id', 'name'))
...
另一种选择是使用ModelMultipleChoiceField
而不是常规的多选字段。使用模型多选字段,Django将在每次初始化表单时评估查询集。
class OrderCreateForm(forms.ModelForm):
tag_from = forms.MultipleChoiceField(label='Tags', queryset=OrderItemList.objects.all())