2016-02-04 58 views
0

我有我从表格中打印所有记录的表格(可以说它在数据库中的'item'表格)。用户可以使用ajax将新项目添加到数据库。数据保存到数据库正确,但当我刷新页面,我没有看到我的多选框中的新标签。Django表单不能从数据库获得最新信息

我以为缓存是一个问题,但它没有。

所以我有问题:我可以看到添加记录正确的问题在哪里,但是当我刷新此相同的页面,每次从表中选择所有行时,我没有看到这些新记录?

我正在使用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())