![](/img/trans.png)
[英]A simple and up-to-date way to implement Facebook login in a Django app
[英]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.