Django使用元模型在表单中隐藏外键
我正在使用django开发一个食谱网站,在我的表单中遇到了外键字段的问题 问题是,当我创建菜谱时,我需要一个外键指向创建此菜谱的菜谱,但我不希望创建菜谱的用户看到原始的\u菜谱字段(他们不应该看到) 我相信我需要使用一个小部件(HiddenInput),但我是否对其他网站上给出的示例感到困惑。我的朋友还提到了一些关于在原始的烹饪书视图中设置初始值的事情 tl;dr:我想将fk指向用户的cookbook,同时隐藏原始的_cookbook字段 相关代码: 表格: 型号:Django使用元模型在表单中隐藏外键,django,forms,widget,foreign-keys,hidden,Django,Forms,Widget,Foreign Keys,Hidden,我正在使用django开发一个食谱网站,在我的表单中遇到了外键字段的问题 问题是,当我创建菜谱时,我需要一个外键指向创建此菜谱的菜谱,但我不希望创建菜谱的用户看到原始的\u菜谱字段(他们不应该看到) 我相信我需要使用一个小部件(HiddenInput),但我是否对其他网站上给出的示例感到困惑。我的朋友还提到了一些关于在原始的烹饪书视图中设置初始值的事情 tl;dr:我想将fk指向用户的cookbook,同时隐藏原始的_cookbook字段 相关代码: 表格: 型号: class Recipe(m
class Recipe(models.Model):
def __unicode__(self):
return self.name
original_cookbook = models.ForeignKey(Cookbook)
#cookbooks = models.ManyToManyField('Cookbook', related_name = 'recipes')
name = models.CharField(max_length=200)
author = models.CharField(max_length= 100)
picture = models.ImageField(upload_to = 'Downloads', blank=True)
pub_date = models.DateTimeField('date published', auto_now_add=True, blank=True)
ingredients = models.TextField()
steps = models.TextField()
prep_time = models.IntegerField()
TYPE_CHOICES= (
('SW', 'Sandwich'),
('AP', 'Appetizers'),
('SD', 'Sauces and Dressings'),
('SS', 'Soups and Salads'),
('VG', 'Vegetables'),
('RG', 'Rice, Grains and Beans'),
('PA', 'Pasta'),
('BR', 'Breakfast'),
('MT', 'Meat'),
('SF', 'Seafood'),
('BP', 'Bread and Pizza'),
('DT', 'Desserts'),
)
type = models.CharField(max_length = 2, choices=TYPE_CHOICES)
def index_queryset(self):
return self.objects.all()
视图:
这一点已得到答复
将exclude=('original_cookbook',)
添加到表单的Meta
类中
然后,在if表单.is\u valid()
代码中,执行如下操作:
....
recipe = form.save(commit=False)
recipe.original_cookbook = whatever_that_is
recipe.save()
...
这允许我隐藏输入,但我将在哪里传递原始的\u cookbook外键?意见?
def createrecipe(request):
if not request.user.is_authenticated():
return HttpResponseRedirect('/index/')
else:
if request.method == 'POST':
form = RecipeForm(request.POST)
if form.is_valid():
recipe = form.save()
user = request.user
cookbooks = user.cookbooks
cookbook = cookbooks.all()[0]
cookbook.recipes.add(recipe)
return HttpResponseRedirect('/account')
else:
form = RecipeForm()
return render_to_response('cookbook/createrecipe.html',
{'form':form},
context_instance=RequestContext(request))
from django import forms
class RecipeForm(forms.ModelForm):
class Meta:
model = Recipe
widgets = {'cookbook': forms.HiddenInput
....
recipe = form.save(commit=False)
recipe.original_cookbook = whatever_that_is
recipe.save()
...