【问题标题】:django formset displaying wrong objectsdjango formset 显示错误的对象
【发布时间】:2020-07-07 15:18:29
【问题描述】:

在创建新的食谱帖子时,我使用两个表单集来表示成分和说明。但是,新的帖子表单集在它们应该为空时由现有的成分和方向对象填充。这是我对新帖子和表格的看法:

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)

【问题讨论】:

    标签: django formset


    【解决方案1】:

    不知道为什么需要它,但是将每个表单集查询设置为“无”解决了这个问题:

    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')
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-13
      • 1970-01-01
      • 1970-01-01
      • 2019-07-21
      相关资源
      最近更新 更多