【问题标题】:Saving Django ModelForm with a ForeignKey使用 ForeignKey 保存 Django ModelForm
【发布时间】:2012-07-23 06:35:02
【问题描述】:

这可能是一个相当简单的问题,但我似乎无法从 Django Docs 中弄清楚。我正在尝试一次保存两个 ModelForm,其中一个是另一个的 ForeignKey。我不确定如何在视图中编写逻辑以确保它们正确地结合在一起。

models.py

class Address(models.Model):
    address = models.CharField(max_length=100)
    city = models.CharField(max_length=50)
    zipcode = models.PositiveIntegerField()

class Store(models.Model):
    name = models.CharField(max_length=100)
    description = models.CharField(max_length=140, blank=True)
    address = models.ForeignKey(Address, null=True)

forms.py

class CreateStore1Form(forms.ModelForm):
    class Meta:
        model = Store
        exclude = ('address',)

class CreateStore2Form(forms.ModelForm):
    class Meta:
        model = Address

views.py

@login_required
def create(request):
    if request.method == "POST":
        form1 = CreateStore1Form(request.POST)
        form2 = CreateStore2Form(request.POST)
        if form1.is_valid() and form2.is_valid():
            store = form1.save(address)
            new_address = form2.save(commit=False)
            new_address.store = store
            mew_address.save()
    else:
        form1 = CreateStore1Form()
        form2 = CreateStore2Form()
    return render(request, 'create.html', locals())

任何帮助将不胜感激。谢谢!

【问题讨论】:

  • 部分答案对您有帮助吗?
  • 为了所有活跃的 StackOverflow 用户,如果您得到一个有效的解决方案,请将答案标记为已接受,这样人们就不会在不再需要答案时花时间回答了。跨度>
  • 我仍然遇到问题。我将使用解决方案更新此线程或标记有效答案。抱歉让这个帖子开这么久。

标签: django django-forms django-views


【解决方案1】:

Django 为这个用例提供了inline formsets

内联表单集是模型表单集之上的一个小型抽象层。 这些简化了通过外部处理相关对象的情况 键。

forms.py

class AddressForm(forms.ModelForm):
    class Meta:
        model = Address

class StoreForm(forms.ModelForm):
    class Meta:
        model = Store
        exclude = ('address',)

views.py

from django.forms.models import inlineformset_factory

@login_required
def create(request):    
    AddressInlineFormSet = inlineformset_factory(Address, Store, form=AddressForm)

     if request.method == 'POST':
         storeForm = StoreForm(request.POST)

         if storeForm.is_valid():
             new_store = storeForm.save()
             addressInlineFormSet = AddressInlineFormSet(request.POST, request.FILES, instance=new_store)

             if addressInlineFormSet.is_valid():
                addressInlineFormSet.save()
                return HttpResponseRedirect(reverse('some_happy_customer_url'))

             else:
                classificationformset = ClassificationInlineFormSet(request.POST, request.FILES, instance=new_store)
     else:
          addressInlineFormSet = AddressInlineFormSet()
          storeForm = StoreForm()
     return render(request, 'create.html', locals())

请参阅question了解更多详情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-14
    • 2011-06-25
    • 2015-10-08
    • 2016-07-07
    • 2020-11-15
    • 2020-04-26
    • 2022-10-02
    • 2017-06-29
    相关资源
    最近更新 更多