我有模型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变量一样。只是想知道是否有更平稳的方式去做。
答案 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)