0

我正在写一个 django 食谱网站,并且对 JSON 字段和表单有疑问

我正在尝试为该站点编写创建配方功能,并想做两件事:

  1. 我想在鼠标单击时添加文本字段,类似于添加电子邮件附件。我想使用 JSONField 这样做(除非 picklefield 更好)

  2. 我希望用户能够在一个文本字段中编辑食谱。我希望我可以将所有步骤打包到一个文本字段中,并允许他们编辑该字段,然后将它们解压缩到步骤中。否则用户可能会因为必须编辑每个单独的步骤而感到困惑。

这是我来自 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-jsonfielddjango-picklefield以避免手动转换对象保存和检索的数据,并创建一个在 init 上提供空列表的表单集。

您可以使用 js 在客户端对其进行操作,但不要忘记在 TOTAL_FORMS 隐藏输入中增加表单计数。在发布表单并清理数据后formset.cleaned_data(),您可以将其放入 PickleField 中而无需任何额外处理(initial如果您需要编辑配方,则可以将来自该字段的数据放入表单集)。

于 2012-04-19T05:12:28.127 回答