2012-04-11 13 views
4

を使用して、私はジャンゴを使用した料理本ウェブサイトに取り組んでいますし、私の形で外部キーフィールドでの問題にジャンゴ隠された外部キーメタモデル

を実行している問題は、私は私のレシピを作成するとき、私は必要だということですこのレシピを作成した料理ブックを指している外部キーを持っていますが、オリジナルの料理ブックフィールドを表示するようにレシピを作成しないようにしています(これは必須ではありません)

私はウィジェットHiddenInput)しかし、私は他のサイトで与えられた例と混同しています。また、私の友人はoriginal_cookbookビューの初期値を設定することについて何か言及しました

tl; dr:元の料理ブックフィールドを隠したままで、fkをユーザの料理本に向けたいと思います。

関連コード:

形態:

class RecipeForm(forms.ModelForm): 

    class Meta: 
     model = Recipe 

モデル:

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() 

ビュー:これはthe documentationに応答さ

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)) 

答えて

8

フォームのMetaクラスにexclude = ('original_cookbook',)を追加します。

.... 
recipe = form.save(commit=False) 
recipe.original_cookbook = whatever_that_is 
recipe.save() 
... 
+0

はいこれは大変ありがとうございます – snackerfish

0

from django import forms 
class RecipeForm(forms.ModelForm): 

    class Meta: 
     model = Recipe 
     widgets = {'cookbook': forms.HiddenInput 
+3

これは私が入力を非表示にするが、ここで、iはoriginal_cookbook外部キーを渡すことができます:

次に、あなたのif form.is_valid()コードで、のような何かをしますか?ビュー? – snackerfish

関連する問題