0

django レシピ Web サイトを作成しており、JSON フィールドとフォームについて質問があります

サイトのレシピ作成関数を作成しようとしていますが、次の 2 つのことを行いたいと考えています。

  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を表示する方法も混乱しています。

これは本当に私を落胆させてきました。

スナックフィッシュ

4

1 に答える 1

0

ここでフォームセットを使用できます。あなたの場合 - django-jsonfieldまたはdjango-picklefieldを使用して、オブジェクトの保存と取得時にデータとの間で手動で変換することを避け、init で空のリストを提供するフォームセットを作成します。

js を使用してクライアント側で操作できますが、TOTAL_FORMS 非表示入力でフォーム数を増やすことを忘れないでください。フォームを POST し、データをクリーニングした後、formset.cleaned_data()追加の処理なしで PickleField に入れることができます (initialレシピを編集する必要がある場合は、フィールドからのデータをフォームセットとして入れることができます)。

于 2012-04-19T05:12:28.127 に答える