【问题标题】:provide the same instance of one form to the other将一种形式的相同实例提供给另一种形式
【发布时间】:2020-08-27 00:46:12
【问题描述】:

更新 我有两张表(型号),一张用于产品名称和功能,另一张用于价格 我规范化为数据库表

喜欢这个

class Model(models.Model):
    name = models.CharField(max_length=23)
    def __str__(self):
       return self.name

class Feature(models.Model):
    model = models.ForeignKey(Model,on_delete=models.CASCADE)
    price = models.IntegerField()
    company = models.CharField(max_length=33)

    def __str__(self):
        return self.model

我的意见.py

def create(request):
    createmodel = ModelForms(prefix='createmodel')
    createfeature = FeatureForm(prefix='createfeature')

    if request.method == 'POST':
        createmodel = ModelForms(request.POST,prefix='createmodel')
        if createmodel.is_valid():
        createmodel.save()
        name = createmodel.cleaned_data['name']
        if createfeature.is_valid():

            createfeature = FeatureForm(request.POST,prefix='createfeature',model=name)        
            createfeature.save()
            return redirect('/lists/')

return render(request,'forms/create.html',{'createmodel':createmodel,'createfeature':createfeature})

我的表单.py

class ModelForms(forms.ModelForm):
    class Meta:
        model = Model
        fields = [
           'name'
        ]

class FeatureForm(forms.ModelForm):
    read_only = ['model']
    class Meta:
        model = Feature
        fields = [
            'price','company'
        ]

但表单不会保存

如何一次性提供准确的外键(填写ModelFormFeatureForm)同时提交两个表单 我知道如何更新两个表单,但是如何通过直接提供实例来创建提交两个表单 非常尊重

【问题讨论】:

  • 这能回答你的问题吗? Multiple Models in a single django ModelForm?
  • 在我问之前,我搜索了,你提到的链接在更新实例存在的两个表单时起作用,但是如果 foreignKey 实例仍然不存在怎么办?
  • 请再看一遍帖子

标签: python django django-models


【解决方案1】:

做起来很简单,因为你没有提供views.py.html 我只好给你我的例子。

views.py

def (request):
    if request.method == 'POST':
        # PROCESS POST METHOD FORM
        user_form = UserEditForm(instance=request.user, data=request.POST)
        profile_form = ProfileEditForm(instance=request.user.profile_user, data=request.POST, files=request.FILES)
        if user_form.is_valid() and profile_form.is_valid():
            user_form.save()
            profile_form.save()
    else:
        # HERE WE ADD TWO FORMS IN CONTEXT
        user_form = UserEditForm(instance=request.user)
        profile_form = ProfileEditForm(instance=request.user.profile_user)

    return render(request, 'accounts/edit.html', {'user_form': user_form, 'profile_form': profile_form})

edit.html

<!-- Above Code -->

<form action="." method="post" enctype="multipart/form-data">
    {{ user_form.as_p }}
    {{ profile_form.as_p }}
    {% csrf_token %}
    <p><input type="submit" value="Save changes"></p>
</form>

<!-- Below Code -->

您可以为两个模型制作两个单独的表格。

在这种情况下最好使用form prefix,在我的情况下它将变成:

def (request):
    if request.method == 'POST':
        # PROCESS POST METHOD FORM
        user_form = UserEditForm(request.POST, prefix="user_form")
        profile_form = ProfileEditForm(request.POST, prefix="profile_form", files=request.FILES)
        if user_form.is_valid() and profile_form.is_valid():
            user_form.save()
            profile_form.save()
    else:
        # HERE WE ADD TWO FORMS IN CONTEXT
        user_form = UserEditForm(prefix="user_form")
        profile_form = ProfileEditForm(prefix="profile_form")

    return render(request, 'accounts/edit.html', {'user_form': user_form, 'profile_form': profile_form})

【讨论】:

  • 但在我的情况下,实例仍未创建(计算机),我知道使用它进行更新,但如果(计算机)实例仍然不存在,如何做同样的事情?!
猜你喜欢
  • 2010-12-16
  • 2010-10-06
  • 2012-10-23
  • 2015-06-23
  • 2011-03-09
  • 1970-01-01
相关资源
最近更新 更多