【问题标题】:How can i display database data on a Django form?如何在 Django 表单上显示数据库数据?
【发布时间】:2019-08-02 14:07:30
【问题描述】:

我创建了一个用户提交订单的页面。订单提交到 SQLite DB 并具有以下字段:Time - Status - Rate - UserID。提交订单后,我希望我的 django 模板显示在页面的“活动订单”部分下方。

我不知道如何在代码方面做到这一点,但我发现我需要创建一个对 db 的查询,其中所有用户的订单都被获取(可能是获取 ID = 用户 ID 的订单?) .

我如何能够在 Django 中执行这样的操作?在我看来?

这是模板的视图:

def myview(request):
    item = get_object_or_404(market, item=item)

    if request.method == 'POST':
        form = MyForm(request.POST)
        if form.is_valid():
            send = form.save()
            send.save()
            messages.success(request, f"Success")
    else:
        form = MyForm()

    return render(request,
                  "main/mytemplate.html",
                  context={"form":form})

以及部分模板:

 <form method="post" novalidate>
        {% csrf_token %}
        {% include 'main/includes/bs4_form.html' with form=form1 %}
        <button name="button1" type="submit" class="btn btn-primary">BUY</button>
</form>
<h3> ACTIVE ORDERS </h3> 
<p> Here should go the orders... </p>

表格:

class MyForm(forms.ModelForm):

    status = forms.CharField()
    rate = forms.FloatField()

    class Meta:
        model = MyModel
        fields = ("status", "rate")



    def save(self, commit=True):
        send = super(MyForm, self).save(commit=False)
        if commit:
            send.save()
        return send

型号:

class MyModel(models.Model):

    rate = models.FloatField()
    user = models.ForeignKey(User, on_delete=models.CASCADE, blank=True, null=True, editable=False)
    time = models.DateTimeField(auto_now_add=True)
    status = models.CharField(max_length=50)


    def save(self): # ALL the signature
        super(MyModel, self).save()

【问题讨论】:

  • 请分享bs4_form.htmlMyForm 的代码
  • 立即添加
  • 您的问题令人困惑。您似乎不想在表单上显示它,而是在单独的页面上显示它。是的,写一个视图和一个模板正是你要做的;你的问题到底是什么?你在哪里写这些有困难?
  • @DanielRoseman 我没有说我希望它出现在另一个页面上。它是这样工作的:用户提交订单并在同一页面上的“活动订单”下显示订单中提交的数据。我只是不知道如何“查询”数据库以在 django 中检索该数据
  • 但是您没有做任何事情来将订单记录为与用户关联。

标签: python django django-forms django-templates django-views


【解决方案1】:

如果我正确理解了您的问题, 也许你可以试试这个:

views.py

    if request.method == 'POST':
        form = MyForm(request.POST)
        if form.is_valid():
            send = form.save(commit=False)
            send.user = request.user # set the currently logged in user
            send.save()
    else:
        form = MyForm()

    # fetch it from database then render it to the template
    active_orders = MyModel.objects.filter(user=request.user)
    context = {
       'form': form,
       'active_orders': active_orders
    }
    return render(request, "main/mytemplate.html", context)

然后,在您的模板中

 <form method="post" novalidate>
        {% csrf_token %}
        {% include 'main/includes/bs4_form.html' with form=form1 %}
        <button name="button1" type="submit" class="btn btn-primary">BUY</button>
</form>
<h3> ACTIVE ORDERS </h3>
{% for active_order in active_orders %}
<p> {{active_order.time}} - {{active_order.time}} - {{active_order.rate}} - {{active_order.user.id}}</p>
{% endfor %}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-02
    • 2015-12-19
    • 2016-12-13
    • 2014-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多