django - django formset 显示错误的对象
问题描述
在创建新的食谱帖子时,我使用两个表单集来表示成分和方向。但是,新的帖子表单集在它们应该为空时由现有的成分和方向对象填充。这是我对新帖子和表格的看法:
def post_new(request):
form = PostForm()
ingredient_form = IngredientFormSet(prefix='ingredient_form')
direction_form = DirectionFormSet(prefix='ingredient_form')
if request.method == "POST":
form = PostForm(request.POST, request.FILES)
ingredient_form = IngredientFormSet(request.POST, prefix='ingredient_form')
direction_form = DirectionFormSet(request.POST, prefix='direction_form')
if form.is_valid():
post = form.save(commit=False)
post.author = request.user
post.published_date = timezone.now()
post.save()
if ingredient_form.is_valid():
for i_form in ingredient_form:
if i_form.is_valid() and i_form.has_changed():
i_form.instance.recipe = post
i_form.save()
if direction_form.is_valid():
for d_form in direction_form:
if d_form.is_valid() and d_form.has_changed():
d_form.instance.recipe = post
d_form.save()
return redirect('post_detail', pk=post.pk)
return render(request, 'blog/post_edit.html', {'form': form, 'ingredient_form': ingredient_form, 'direction_form': direction_form})
class PostForm(forms.ModelForm):
class Meta:
model = Post
fields = ['title', 'image', 'text', 'prep_time', 'cook_time', 'servings_first', 'servings_second', 'tags']
IngredientFormSet = modelformset_factory(Ingredient, fields=['name',
'int_amount',
'float_amount',
'measurement'
], extra=15)
DirectionFormSet = modelformset_factory(Direction, fields=['text',
'order'
], extra=25)
解决方案
不知道为什么需要它,但是将每个表单集查询设置为“无”解决了这个问题:
def post_new(request):
form = PostForm()
ingredient_form = IngredientFormSet(queryset=Ingredient.objects.none(), prefix='ingredient_form')
direction_form = DirectionFormSet(queryset=Direction.objects.none(), prefix='ingredient_form')
推荐阅读
- c++ - 满足某个概念的所有完整类型的元组
- r - 使用缩放的迷你地图绘制地图
- c++ - std::stable_sort 中的“在 ... 需要 ... 需要的实例化中”和“没有类型命名 ...”
- python - 比较两个模型并找到具有最高 R 平方的模型
- amazon-ec2 - 如何在 EC2 实例上将 netplan 与第三个 ENI 一起使用
- android - android studio 编辑器中的失真(伪影)
- sql - SQL - 每个月选择 MAX 或 TOP 1
- python - sklearn train_test_split 坏了
- c# - 使用 C# 将我的迭代选择排序更改为递归排序
- python - 如果语句不适用于 Pandas(csv) 元素