【问题标题】:Django forms.ModelForm POST change object before updateDjango forms.ModelForm POST 更新前更改对象
【发布时间】:2021-06-19 11:03:49
【问题描述】:

通过标准的 HTML POST 表单,我可以使用以下代码成功更新现有记录,但情况是我需要在将表单数据保存到数据库之前更改一个数据字段。在 Django 网站上,他们说创建一个新的表单实例并更改字段,但无论出于何种原因,字段数据在 save() 操作中都没有更改。

class ProvisioningDetails(View):
def post(self, request, provisioning_ptr_id, terminal_id, site_id):
    form = ProvisioningForm(request.POST)
    if form.is_valid():
     a = Provisioning.objects.get(provisioning_ptr_id=provisioning_ptr_id)
    
     f = ProvisioningForm(request.POST, instance=a)
     f.str1 = "some new data"
     f.save()

     return redirect(
        "provisionings_show_view", site_id, terminal_id, provisioning_ptr_id
    )

class ProvisioningForm(forms.ModelForm):
class Meta:
    model = Provisioning
    fields = [
        "id",
        "fixedip",
        "str1",
        "str2",
        "str3",
        "ip",
    ]


def clean(self,):
    cleaned_data = super(ProvisioningForm, self).clean()

我也试过这个,它确实改变了表单中的数据,但没有改变数据库中的数据:

    class ProvisioningDetails(View):
def post(self, request, provisioning_ptr_id, terminal_id, site_id):
    form = ProvisioningForm(request.POST)
    if form.is_valid():
     a = Provisioning.objects.get(provisioning_ptr_id=provisioning_ptr_id)
    
     new = ProvisioningForm(request.POST)
     new.str1 = "some new data" 
     f = ProvisioningForm(new, instance=a)
     f.save()

     return redirect(
        "provisionings_show_view", site_id, terminal_id, provisioning_ptr_id
    )

任何人都知道我如何将 str1 = "some new data" 保存在数据库中

【问题讨论】:

    标签: python django database post modelform


    【解决方案1】:

    如果您想用新数据更改数据库中的一个字段,您可以先执行a.str1 = "new data",然后执行a.save()

    否则,如果您想更改请求负载数据然后保存,您可以使用Provisioning.objects.create('your fields here') 和 .save()

    无论哪种方式,我认为您最好使用序列化程序:

    https://www.django-rest-framework.org/api-guide/serializers/

    【讨论】:

    • 这个问题是在设置 a.str1 = "new data" 之后,是的,此时它会更新对象,但随后它将被 f = ProvisioningForm(request.POST, instance=a) 覆盖并且请求(Post)中的字段会覆盖新设置的 a.str1 = "new data"
    • 我还不是很清楚你想要做什么:先保存表单,然后获取对象并编辑:f=... .... a = Provisioning.objects.get (provisioning_ptr_id=provisioning_ptr_id) a.str1 = " " a.save()
    • 情况是我在请求中收到的数据。用我无法存储在数据库中的数组发布字段 str1。因此,当我首先更新数据库时,我收到一个数据库错误,因为不允许使用该数组。我想要做的是request.Post并将字段更改为整数..所以我已经尝试了你的建议vut我无法更改字段gorm request.POST >>>更改字段并保存。跨度>
    【解决方案2】:

    所以解决方案很简单,但是

    post = request.POST.copy() post.update({"str1": "一些新文本"})

    a = Provisioning.objects.get(provisioning_ptr_id=provisioning_ptr_id)

    f = ProvisioningForm(post, instance=a) f.save()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-26
      • 2022-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-08
      • 2020-12-10
      • 2018-05-31
      相关资源
      最近更新 更多