簡體   English   中英

如何在Django表單上顯示數據庫數據?

[英]How can i display database data on a Django form?

我創建了一個頁面,用戶可以在其中提交訂單。 該訂單已提交到SQLite數據庫,並具有以下字段: 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()

如果我正確理解您的問題,也許您可​​以嘗試以下方法:

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 %}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM