2012-04-18 8 views
0

上のテキストフィールドを追加し、JSONフィールドについての質問を持っていると私は、サイトの作成レシピ関数を記述しようとしていますDjangoは、私はDjangoのレシピのウェブサイトを書いていますクリック

を形成し、二つのことやってみたかった:

  1. メールの添付ファイルを追加する場合と同様に、マウスクリックでテキストフィールドを追加します。私はJSONFieldを使いたいです(picklefieldが良い場合を除いて)

  2. 私はユーザーが1つのテキストフィールドでレシピを編集できるようにしたいと思います。 私は、すべてのステップを1つのテキストフィールドにパックして、そのフィールドを編集してからステップに戻すことができることを願っていました。それ以外の場合は、ユーザーが各ステップを個別に編集する必要があります。ここ

は、Djangoのプロジェクトから私のモデルです:

class Cookbook(models.Model): 
    def __unicode__(self): 
     return self.name 
    name = models.CharField(max_length=50) 
    pub_date = models.DateTimeField('date published') 
    user = models.ForeignKey(User, related_name='cookbooks') 
    recipes = models.ManyToManyField('Recipe', related_name = 'cookbooks') 


class Recipe(models.Model): 
    def __unicode__(self): 
     return self.name 
    original_cookbook = models.ForeignKey(Cookbook) 
    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 = JSONField() 
    steps = JSONField() 
    prep_time = models.IntegerField() 

ここで私は新しいレシピを作成した図です。今私は自分の見解でJSONFieldを使う方法がわかりません。

私はこれを見つけましたが、「最後に、フォームとのやり取りの仕組みがまだ分かりません。そのため、領域は少しばかり暗いです」私はフォームを使用しているのを見て、これは解決されていますか?ここ

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(commit=False) 
       recipe.original_cookbook = request.user.cookbooks.all()[0] 
       recipe.pub_date = datetime.datetime.now() 
       recipe.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)) 

はcreaterecpe.htmlブロックのコンテンツです:

{% block content %} 
    <form action="." method="POST"> 
     <table> 
      {% csrf_token %} 
      {{ form.as_table }} 
     </table> 
     <p><input type="submit" value="Submit"></p> 
    </form> 
{% endblock %} 

私はJSONFieldモデルとJSONフィールドにテキストを入力/表示するビューの間のギャップを埋めるに苦労しています。私はテンプレートにjsonfieldを表示する方法も混乱しています。

はあなたがここに formsetを使用することができます

snackerfish

+0

あなたがこれまでに持っているモデルを表示/説明すると便利です。 –

+0

ありがとう@benauthorモデル – snackerfish

答えて

0

、これは本当に私を落胆されている任意の助けをありがとうございました。あなたの場合 - オブジェクトの保存と取得に関するデータの手動/手動変換を避けるためにdjango-jsonfieldまたはdjango-picklefieldとし、initで空のリストを提供するformsetを作成してください。

jsを使用してクライアント側で操作できますが、隠し入力TOTAL_FORMSでフォームカウントを増やすことを忘れないでください。フォームをポストしてデータを整理した後には、formset.cleaned_data()があります。これは、任意の処理なしでPickleFieldに置くことができます(レシピを編集する必要がある場合は、initialをformsetに入れることができます)。

+0

を追加しました。もし私がrecipe_ingredientsにjsonを使用したいのであれば、TextFieldの代わりにJsonFieldを使用するだけですか?またはjsonフィールドを作成してjsonフィールドにテキストフィールドを追加する必要があります @ilvarこれは完璧だと思われます – snackerfish

+0

私はjsonを設定する方法を知っていましたが、今はテンプレートでエラーが発生しています **キャッチValueError:レンダリング中にJSONオブジェクトをデコードできません** テンプレート内のJSONなどをアンパックする必要はありますか? – snackerfish

+0

JSONフィールドはPythonオブジェクト(通常はdictまたはlist)を返します。問題はDB内のデータが間違っていますが、JSONは正しくありません。たぶんあなたはその分野に何か間違っているかもしれません。あなたはどのようにそれに人口を入れましたか?その分野のDBにはどのようなデータがありますか? – ilvar

関連する問題