编辑时Django内联表单集排序问题



我正在尝试使用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,但看起来很糟糕,实际上不起作用

现在,您仍在表单集中返回相同的查询集(已计算和排序(。你需要的是获得你刚刚保存的数据,并用它更新表单集。我认为你有两个选项应该有效。

  1. 像您所说的那样重新创建carousel_formset。这可能不是你想要的,但似乎比我的第二个建议更有可能。你说你试过了,但没用。如果你的代码看起来和我的一样,那么你可能想跳过这种方法
carousel_formset.save()
carousel_formset = SlideCarouselInlineFormSet(
instance=city, 
queryset=city.slidecarousel_set.order_by("order"),
)
  1. 通常,在保存表单(集(后,我会重定向到成功的URL。在这种情况下,这将是相同的路径
carousel_formset.save()
return redirect(request.path)

第三个选项是重新设置carousel_formset.queryset属性,我不知道它是否有效,但您可以尝试,只需付出很少的努力。

carousel_formset.save()
carousel_formset.queryset = city.slidecarousel_set.order_by("order")

相关内容

  • 没有找到相关文章

最新更新