将模型实例传递给django表单

时间:2014-12-28 04:16:49

标签: django django-models django-forms

我有模型A和模型B.因此:

class A(models.Model):
     ...

class B(models.Model):
    a = models.ForeignKey(A)
    ...

现在,用户创建了model A的实例,并且从详细信息页面我想让他们单击链接以创建附加到{{model B的实例。 1}}他们刚才做的。有没有一种简单的方法可以传递给A model B model A(用户正在查看的那个)实例的表单我要将其附加到?用户没有理由知道它的任何内容,并且使隐藏字段看起来有点像黑客,就像把它作为一个get变量一样。只是想知道是否有更平稳的方式去做。

2 个答案:

答案 0 :(得分:1)

将此类字段作为隐藏字段传递是正常的解决方案。

class BForm(forms.ModelForm):
    class Meta:
        model = B
        widgets = {'a': forms.HiddenInput()}

views.py 中,使用A:

的实例启动此字段
form = BForm(initial={'a': a})

这不是黑客攻击,而是标准选项。

答案 1 :(得分:0)

  

现在,用户创建模型A的实例,并从详细信息页面I开始   希望允许他们单击链接以创建模型B的实例   这与他们刚刚制作的A有关。

您正在寻找inline formsets

  

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

文档中的示例比我更好地解释了它:

class Author(models.Model):
    name = models.CharField(max_length=100)

class Book(models.Model):
    author = models.ForeignKey(Author)
    title = models.CharField(max_length=100)

from django.forms.models import inlineformset_factory
BookFormSet = inlineformset_factory(Author, Book)
author = Author.objects.get(name=u'Mike Royko')
formset = BookFormSet(instance=author)