在表单处理期间,我希望能够在模型对象上设置外键字段,而无需用户从下拉列表中选择键。
例如:
#models.py
class AAA(models.Model):
some_field = models.TextField()
class BBB(models.Model):
another_field = models.TextField()
key_field = models.ForeignKey('AAA')用户将从显示'AAA‘实例的视图导航到create_object样式视图,该视图将在给定引用'AAA’的参数的情况下创建'BBB‘的实例。在代码中设置外键以指向回'AAA‘实例。
django comments框架似乎可以做到这一点,但我不知道如何做到这一点。
有什么想法吗?我相信这应该是非常简单的。
发布于 2012-01-23 20:43:13
您可以从模型表单中排除key_field,使用commit=False保存,然后在保存到数据库之前在视图中设置key_field。
class BBBForm(forms.ModelForm):
class Meta:
model = BBB
exclude = ("key_field",)
def create_view(request, **kwargs):
if request.method == "POST":
aaa = # get aaa from url, session or somewhere else
form = BBBForm(request.POST)
if form.is_valid():
bbb = form.save(commit=False)
bbb.key_field = aaa
bbb.save()
return HttpResponseRedirect("/success-url/")
...发布于 2012-01-23 20:41:36
当用户通过AAA实例创建BBB时,这应该反映在URL中,即您的"create_object样式视图“将获得一个标识AAA对象的参数。您可以使用它从数据库中获取对象,并相应地创建BBB对象:
from django.shortcuts import get_object_or_404
def create_bbb_view(request, aaa_id):
a = get_object_or_404(AAA, id=aaa_id)
form = MyBBBCreationForm(request.POST) # or similar code
if form.is_valid():
b = BBB.objects.create(key_field=a) # plus other data from form
# ...(您也可以直接将key_field设置为aaa_id,但检查对象是否存在可能是一个好主意。)
https://stackoverflow.com/questions/8971606
复制相似问题