繁体   English   中英

Django表单无法从db获取最新信息

[英]Django forms don't get up-to-date from db

我有一个表格,可以在其中打印表中的所有记录(可以说数据库中的“项目”表)。 用户可以使用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)

问题是您要在字段定义中设置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())

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM