无法弄清楚如何使用不同的前缀 django 创建多个 Modelforms

奥马尔·詹达利

我正在研究一个项目的特定视图,但我似乎无法弄清楚如何完成它。

我想在 Django 视图中动态复制单个表单,并根据查询集中的数据字段为每个表单添加一个前缀。我想然后将重复的表单传递到 HTML 中,用户可以在其中输入字段中的信息,然后提交。

问题是我无法弄清楚如何根据查询集的结果创建具有不同前缀的重复表单。并将每个前缀分配给正在调用的用户记录的用户名。

所以假设我有一个查询集,它调用一个查询集来拉取名称以 t 开头的所有用户。对于用户查询中的每个用户,我想基于 inividualsplitform 创建一个表单,并为每个表单添加带有附加到特定用户的用户名的前缀。我想将每个表单传递给 HTML 模板并在 HTML 文件中显示表单。一旦用户填写了表单,我希望能够通过相同的查询并形成用户查询中的每个用户,使用用户名作为识别每个不同表单并提取信息的方法。

现在发生的事情是它为用户查询中的最后一个用户创建一个表单,并推送该表单并且仅推送该表单而不是所有表单。并且只有最后一个返回由视图处理。

这是我现在的观点:

def addTransaction(request, groupId, recordId):
    user = User.objects.get(username='omar')
    group = Group.objects.get(id=groupId)
    record = Record.objects.get(id=recordId)
    transactions = Transaction.objects.filter(record=recordId).all()
    if request.method == 'POST':
        if record.split == 1:
            form = EvenSplitTransactionForm(request.POST)
            if form.is_valid():
                cd = form.cleaned_data
                amount = cd['amount']
                description = cd['description']
                split_amount = SplitEven(record, amount)
                for trans in transactions:
                    if trans.record.id == record.id:
                        trans.description = description
                        trans.amount = split_amount
                        trans.save()
                return redirect('group_home', groupId=group.id)
        if record.split == 2:
            # this is where i want to iterate though the formset and get the info
            # that i need from the forms that the user submitted.
            forms = TransFormSet()
            for form in forms:
                display = 'message'
                print(display)
        return redirect('accounts')
    else:
        if record.split == 1:
            form = EvenSplitTransactionForm()
            message = 'fill out the form below'
            parameters = {
                'record':record,
                'form':form,
                'message':message,
                'transactions':transactions,
            }
            return render(request, 'tabs/add_even_transactions.html', parameters)
        if record.split == 2:
            for transaction in transactions:
                form = IndividualSplitTransactionForm(prefix = transaction.user.username)
            print(form)
            message = 'message'
            parameters = {
                'record':record,
                'form':form,
                'message':message,
                'transactions':transactions,
            }
            return render(request, 'tabs/add_individual_transaction.html', parameters)

更新:我让表单工作,但我在表单列表验证和随表单提交的信息收集方面遇到问题。

def addTransaction(request, groupId, recordId):
    user = User.objects.get(username='omar')
    group = Group.objects.get(id=groupId)
    record = Record.objects.get(id=recordId)
    transactions = Transaction.objects.filter(record=recordId).all().count()
    formset = formset_factory(IndividualSplitTransactionForm, extra=transactions)
    if request.method == 'POST':
        if record.split == 1:
            form = EvenSplitTransactionForm(request.POST)
            if form.is_valid():
                cd = form.cleaned_data
                amount = cd['amount']
                description = cd['description']
                split_amount = SplitEven(record, amount)
                for trans in transactions:
                    if trans.record.id == record.id:
                        trans.description = description
                        trans.amount = split_amount
                        trans.save()
                return redirect('group_home', groupId=group.id)
        if record.split == 2:
            cheese = 'cheese'
            # this is where i want to iterate though the formset and get the info
            # that i need from the forms that the user submitted.
            # form = formList(request.POST)
            # if form.is_valid():
            #     cd = form.cleaned_data
            #     for transaction in transactions:
            #         amount = transaction.user.username + '-amount'
            #         description = transaction.user.username + '-description'
            #         currentAmount = cd[amount]
            #         currentDescription = cd[description]
            #         transaction.amount = currentAmount
            #         transaction.description = currentDescription
            #         transaction.save()
            #     return redirect('group_home', groupId=group.id)
        return redirect('accounts')
    else:
        if record.split == 1:
            form = EvenSplitTransactionForm()
            message = 'fill out the form below'
            parameters = {
                'record':record,
                'form':form,
                'message':message,
                'transactions':transactions,
            }
            return render(request, 'tabs/add_even_transactions.html', parameters)
        if record.split == 2:
            print(formset)
            message = 'message'
            parameters = {
                'record':record,
                'formset':formset,
                'message':message,
                'transactions':transactions,
            }
            return render(request, 'tabs/add_individual_transaction.html', parameters)
松原

更改标签

from django.forms import BaseFormSet
class BaseTestFormset(BaseFormSet):
    def add_fields(self, form, index):
        super().add_fields(form, index)
        form.fields['your field name'].label = "new label"
        return form

TestFormset = formset_factory(TestForm, formset=BaseTestFormSet)

如果您有用户名列表,则可以将“新标签”更改为 usernameList[index]

exList = ["hello", "there"]

...
def add_fields(self, form, index):
    super().add_fields(form, index)
    form.fields['your field name'].label = exList[index]
    return form

使用表单集

if request.method == 'POST':
    TestFormSet = formset_factory(TestForm)
    formset = TestFormSet(request.POST)
    if formset.is_valid():
        for form in formset:
             form.save()
    ...

else:
    TestFormSet = formset_factory(TestForm, extra=0)
    initial_list = []
    for transaction in transactions:
        initial_list.append({'username': transaction.user.username, 'anotherField': transaction.anotherField})
    formset = TestFormSet(initial=initial_list)
    ...
    return render(request, .. { .. , 'formList':formset})

如果您的问题是它只显示最后一个表单,则需要查看这部分代码。

for transaction in transactions:
    form = IndividualSplitTransactionForm(prefix = transaction.user.username)

您将最后一个表单保存在表单变量中。所以我认为你可以考虑如下。

formList = []
# make list object with form elements
for transaction in transactions:
    form = IndividualSplitTransactionForm()
    formList.append(form)
...

# send formList in Context
parameters = {
            'record':record,
            'formList':formList,
            'message':message,
            'transactions':transactions,
        }

# In your html, you can iterate your formList and show each form.
{% for form in formList %}
   {{form}}
{% endfor %}

回答其他问题

我知道表单中有用户名字段。所以我的建议是这样的。

for transaction in transactions:
    form = IndividualSplitRansactionFrom(initial={'fieldname which has FK for user instance' : user})

我的想法是通过设置初始值将用户名值放入表单中。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Django:在Modelforms中使用ImageField

来自分类Dev

Django Modelforms:如何显示CharField的选择?

来自分类Dev

Django ModelForms __init__ kwargs创建和更新

来自分类Dev

如何在一个Django表单工具WizardView中保存具有多个modelForms的多个模型

来自分类Dev

如何在Django ModelForms中编写占位符?

来自分类Dev

如何将活动用户传递给Django ModelForms

来自分类Dev

无法弄清楚如何散列密码 django

来自分类Dev

无法弄清楚Django中prefetch_related的使用

来自分类Dev

无法弄清楚Django中prefetch_related的使用

来自分类Dev

无法弄清楚如何创建特殊条件

来自分类Dev

无法弄清楚如何创建响铃警报的取消按钮

来自分类Dev

Django ModelForm使用不同的ForeignKey创建多个实例

来自分类Dev

如何在Django 1.6中使用ModelForms避免“记录已存在”表单验证错误?

来自分类Dev

无法弄清楚多个IF功能

来自分类Dev

如何在Django中适当地测试ModelForms和视图

来自分类Dev

如何将类添加到Django ModelForms文件字段

来自分类Dev

如何在整个查询集上初始化 Django ModelForms?

来自分类Dev

如何在Django的ModelForms表中正确提交一个表单?

来自分类Dev

Django:向 ModelForms 添加默认值

来自分类Dev

如何使用django循环{% %}创建多个<div>

来自分类Dev

无法弄清楚如何使用输入文本框在Shiny中创建和运行用户定义的R函数

来自分类Dev

Django中的modelforms是否要求表单具有Forms.fieldtype格式?form.save()无法用于多重上传

来自分类Dev

Django ModelForms-使用中间模型测试具有M2M内联实例的模型的表单

来自分类Dev

从事C#子手游戏,无法弄清楚如何检测多个字母

来自分类Dev

SQL中存在多个SELECT的问题无法弄清楚

来自分类Dev

Django ModelForms:在表单中植入FK相关字段

来自分类Dev

Django:ModelForms:ImageField始终为空,并被ModelForm拒绝

来自分类Dev

POST 请求中的 Django ModelForms 和普通表单

来自分类Dev

Django ModelForms 忽略了一个干净的字段方法

Related 相关文章

  1. 1

    Django:在Modelforms中使用ImageField

  2. 2

    Django Modelforms:如何显示CharField的选择?

  3. 3

    Django ModelForms __init__ kwargs创建和更新

  4. 4

    如何在一个Django表单工具WizardView中保存具有多个modelForms的多个模型

  5. 5

    如何在Django ModelForms中编写占位符?

  6. 6

    如何将活动用户传递给Django ModelForms

  7. 7

    无法弄清楚如何散列密码 django

  8. 8

    无法弄清楚Django中prefetch_related的使用

  9. 9

    无法弄清楚Django中prefetch_related的使用

  10. 10

    无法弄清楚如何创建特殊条件

  11. 11

    无法弄清楚如何创建响铃警报的取消按钮

  12. 12

    Django ModelForm使用不同的ForeignKey创建多个实例

  13. 13

    如何在Django 1.6中使用ModelForms避免“记录已存在”表单验证错误?

  14. 14

    无法弄清楚多个IF功能

  15. 15

    如何在Django中适当地测试ModelForms和视图

  16. 16

    如何将类添加到Django ModelForms文件字段

  17. 17

    如何在整个查询集上初始化 Django ModelForms?

  18. 18

    如何在Django的ModelForms表中正确提交一个表单?

  19. 19

    Django:向 ModelForms 添加默认值

  20. 20

    如何使用django循环{% %}创建多个<div>

  21. 21

    无法弄清楚如何使用输入文本框在Shiny中创建和运行用户定义的R函数

  22. 22

    Django中的modelforms是否要求表单具有Forms.fieldtype格式?form.save()无法用于多重上传

  23. 23

    Django ModelForms-使用中间模型测试具有M2M内联实例的模型的表单

  24. 24

    从事C#子手游戏,无法弄清楚如何检测多个字母

  25. 25

    SQL中存在多个SELECT的问题无法弄清楚

  26. 26

    Django ModelForms:在表单中植入FK相关字段

  27. 27

    Django:ModelForms:ImageField始终为空,并被ModelForm拒绝

  28. 28

    POST 请求中的 Django ModelForms 和普通表单

  29. 29

    Django ModelForms 忽略了一个干净的字段方法

热门标签

归档