Django表格不会从db

时间:2016-02-04 17:49:35

标签: django django-models django-forms

我有表格可以打印表格中的所有记录(比如说数据库中的' 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)

1 个答案:

答案 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())