gpt4 book ai didi

django - 在 Django 的模型表单中包含相关对象的表单

转载 作者:行者123 更新时间:2023-12-02 06:50:47 27 4
gpt4 key购买 nike

我有两个这样的模型:

class Person(models.Model):
name = models.CharField(max_length=100)
house = models.ForeignKey('House')

class House(models.Model):
address = models.TextField()

是否有某种方法可以为 Person 创建模型表单,并使其包含内联表单以编辑相关的 House 对象?根据我对内联表单集内容的理解,只有当我有一个编辑 House 的表单并且我想显示所有相关 Person 的表单时,我才会使用它。有什么想法吗?

最佳答案

只需将 HouseForm 插入 PersonForm,将其作为 clean() 过程的一部分进行评估,并将其保存为 save() 过程的一部分。也适用于模型表单集。

class HouseForm(forms.modelForm):
""" Edit a house """
class Meta:
model = House
exclude = ()

class PersonForm(forms.ModelForm):
""" Edit a person and her house """
class Meta:
model = Person
exclude = ()

def __init__(self, *args, **kwargs):
super(PersonForm, self).__init__(*args, **kwargs)
self.fields['house'].required = False
data = kwargs.get('data')
# 'prefix' parameter required if in a modelFormset
self.house_form = HouseForm(instance=self.instance and self.instance.house,
prefix=self.prefix, data=data)

def clean(self):
if not self.house_form.is_valid():
raise forms.ValidationError("House not valid")

def save(self, commit=True):
obj = super(PersonForm, self).save(commit=commit)
obj.house = self.house_form.save()
obj.save()

然后在您的标记中:

<form ...>
{{ person_form }}
{{ person_form.house_form }}
</form>

关于django - 在 Django 的模型表单中包含相关对象的表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14296350/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com