【问题标题】:Django Update field of three models with same name via ModelForm Field通过 ModelForm 字段的三个同名模型的 Django 更新字段
【发布时间】:2017-05-22 09:49:30
【问题描述】:

我创建了一个包含注释字段的表单,当最终用户填写注释字段并点击提交时,我不仅需要将文本保存在 ModelOne Notes 中,还需要更新 ModelTwo 和 ModelThree 中的注释字段相同的文字。

当前代码:

查看.py

class CommandRadioView(FormView):
template_name = 'Gameflow/command_call_notes.html'
form_class = CommandCallForm

def get(self, request, *args, **kwargs):
    self.mission = get_object_or_404(Mission, pk=kwargs.get('mission_id', None))
    kwargs['user_id'] = self.mission.proposal.user.id
    self.radio = get_object_or_404(CommandPhone, pk=kwargs.get('radio_id', None))
    phone_type = CommandPhoneCallType(
        description=' General Comm',
        phonecall=self.radio
    )
    phone_type.save()
    self.mission.complete_mission(
        request.user,
        self.radio.created_at
    )
    return super().get(request, *args, **kwargs)

def post(self, request, *args, **kwargs):
    if "save" in request.POST:
        return super().post(request, *args, **kwargs)
    else:
        url = self.get_success_url()
        return HttpResponseRedirect(url)

def form_valid(self, form):
    self.object = form.save(commit=False)
    self.object.save()
    return super().form_valid(form)

Form.py:

class CommandCallForm(forms.ModelForm):
class Meta:
    model = Mission
    fields = ['notes']

def __init__(self, *args, **kwargs):
    super().__init__(*args, **kwargs)
    self.helper = FormHelper()
    self.helper.form_id = 'user_form'
    self.helper.form_class = 'form-horizontal'
    self.helper.label_class = 'col-lg-3'
    self.helper.field_class = 'col-lg-8'

    self.helper.layout = Layout(
        Field(
            'notes',
        ),
        FormActions(
            Submit('save', 'Submit'),
            Button('cancel', 'Cancel', css_class='cancel')
        )
    )

如果您缺少您需要查看的内容,请告诉我欢呼。

【问题讨论】:

  • 您的表格在哪里?发布请求方法实际上什么都没有?
  • @FazilZaid 添加了表单代码,是的,我知道这只是我发现自己必须使用 post 的第二次,而且我不确定执行多个模型所需的查询
  • 您能解释一下您要达到的目标吗?我不太明白..
  • @FazilZaid 没问题,所以我在这个表单上有一个注释字段,它链接到任务模型,但我还需要更新其他两个模型,它们的注释字段与输入的文本相同单击提交时的此表单
  • 您能否也展示模型以便更好地理解?

标签: python django forms models


【解决方案1】:

根据你的询问和我的理解,我编辑了你的观点,

这样,

class CommandRadioView(FormView):
    template_name = 'Gameflow/command_call_notes.html'
    form_class = CommandCallForm            

    def post(self, request, *args, **kwargs):
        form_class = self.get_form_class()
        form = self.get_form(form_class)
        if form.is_valid():
            self.mission = get_object_or_404(Mission, pk=kwargs.get('mission_id', None))
            kwargs['user_id'] = self.mission.proposal.user.id
            self.radio = get_object_or_404(CommandPhone, pk=kwargs.get('radio_id', None))
            phone_type = CommandPhoneCallType(description=' General Comm', phonecall=self.radio)
            phone_type.save()
            self.mission.complete_mission(request.user, self.radio.created_at)
            return self.form_valid(form)
        else:
            return self.form_invalid(form)

    def form_valid(self, form):
        self.object = form.save(commit=False)
        self.object.save()
        return super().form_valid(form)

【讨论】:

    猜你喜欢
    • 2012-04-29
    • 2011-09-04
    • 1970-01-01
    • 2012-01-03
    • 1970-01-01
    • 2011-01-15
    • 2014-12-25
    • 2018-11-01
    • 1970-01-01
    相关资源
    最近更新 更多