django - 编辑时的 Django inline-formset 排序问题
问题描述
我正在尝试使用 Django 内联表单集。
表单应按订单值排序显示,这在我请求表单时已正确完成。但是如果我更改订单值并保存,第一个视图是前一个订单(刷新就可以了)
表格:
class SlidesForm(forms.ModelForm):
order = forms.IntegerField(widget=forms.NumberInput())
background_image = forms.ImageField(widget=forms.FileInput(attrs={'class': 'custom-file-input'}), required=False)
text = forms.CharField(max_length=256, widget=forms.Textarea(attrs={'rows': 2, 'class': 'form-control'}), required=False)
class Meta:
model = SlideCarousel
fields = ['order', 'background_image', 'text']
意见:
def management_form_general(request, city_slug):
city = City.objects.get(slug=city_slug)
SlideCarouselInlineFormSet = inlineformset_factory(City, SlideCarousel, form=SlidesForm, extra=0)
if request.method == 'POST':
carousel_formset = SlideCarouselInlineFormSet(request.POST, request.FILES, instance=city, queryset=city.slidecarousel_set.order_by("order"))
if carousel_formset.is_valid():
carousel_formset.save()
else:
carousel_formset = SlideCarouselInlineFormSet(instance=city, queryset=city.slidecarousel_set.order_by("order"))
return render(request, 'management/form/city_general.html', {'city': city, 'carousel_formset': carousel_formset})
知道我做错了什么吗?试图在保存后重新实例化 carousel_formset 但它看起来很讨厌而且它实际上没有用
解决方案
现在,您仍然在表单集中返回相同的查询集(已经评估和排序)。您需要的是获取刚刚保存的数据并使用它更新表单集。我认为你有两个应该可行的选择。
carousel_formset
像你说的那样重新创建。这可能不是您想要的,但它似乎比我的第二个建议更有可能。你说你试过这个,它没有用。如果你的代码看起来和我的一样,那么你可能想跳过这种方法。
carousel_formset.save()
carousel_formset = SlideCarouselInlineFormSet(
instance=city,
queryset=city.slidecarousel_set.order_by("order"),
)
- 通常,在我保存一个表单(集)后,我会重定向到一个成功的 URL。在这种情况下,这将再次是相同的路径。
carousel_formset.save()
return redirect(request.path)
我不知道它是否会起作用的第三个选项,但你可以尝试很少的努力,就是重新设置carousel_formset.queryset
属性。
carousel_formset.save()
carousel_formset.queryset = city.slidecarousel_set.order_by("order")
推荐阅读
- r - 绘制具有不同 DV 但比例相同的回归线
- angular6 - 我注意到我的 Angular 应用程序中有一个非常奇怪的行为
- tensorflow - 两个文档列表之间的相似性
- javascript - 从两个不同的数组创建一个 JSON 对象
- mysql - SQL COUNT() 和 Angular
- javascript - 在 for 循环中添加 qrcode 时网站冻结
- php - 如何将功能连接到按钮?
- swift - Swift - 让 TableViewControllers 相互交谈
- optaplanner - DefaultConstructionHeuristicPhase - workingScoreHolder 持有不接受移动的无效分数
- javascript - 更改 H1 背景颜色