Слишком много просмотров логи c в django шаблоне - PullRequest
0 голосов
/ 19 марта 2020

Я сейчас создаю платформу электронной коммерции. Я работаю над частью заказа, которая создает заказ после того, как два человека согласились заключить сделку. Проблема в том, что модель заказа имеет много полей, и, как я хочу, чтобы мой шаблон выглядел по-разному в зависимости от многих значений, таких как; была произведена оплата? Товар был отправлен? возник спор? Я также хочу, чтобы страница выглядела по-разному в зависимости от того, просматривает ли ее страница покупатель или продавец. Очевидно, что если продавец просматривает страницу, я не хочу, чтобы он видел кнопку «Оформить заказ», или покупатель видит товар, отмеченный как отправленный и т. Д. c.

Так что в настоящее время у меня есть эта работа, однако есть много из операторов if в моем шаблоне, чтобы сделать это, и представление имеет много логики c. Мой вопрос заключается в том, есть ли лучший (более эффективный и быстрый) способ сделать это, так как я знаю, что большинство logi c должны быть исключены из шаблона. Если это не замедлит работу моего сайта, тогда это приемлемо, но если это так, мне действительно нужно его изменить.

Код модели:


class Order(models.Model):
   created = models.DateField(auto_now_add=True)
   updated = models.DateField(auto_now=True)
   offer = models.OneToOneField(Offer, on_delete=models.CASCADE)
   advert = models.OneToOneField(Advert, on_delete=models.CASCADE)
   buyer = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='order_buyer')
   seller = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='order_seller')
   price = models.DecimalField(max_digits=10, decimal_places=2)
   payment_received = models.BooleanField(default=False)
   shipped = models.BooleanField(default=False)
   receipt = models.ImageField(upload_to='media/', blank=True, null=True)
   pending = models.BooleanField(default=True)
   completed = models.BooleanField(default=False)
   active = models.BooleanField(default=True)
   disputed = models.BooleanField(default=False)
   canceled = models.BooleanField(default=False)

Вид:

@login_required
@permission_required_or_403('orders.view_article', (Order, 'pk', 'pk') )
def orderdetail(request, pk, *args, **kwargs):
    order = get_object_or_404(Order, pk=pk)
    seller = order.seller
    buyer = order.buyer 
    user = request.user
    shipped = order.shipped
    completed = order.completed
    pending = order.pending
    disputed = order.disputed

    mark_shipped_form = OrderShippedForm(request.POST or None, request.FILES or None, instance=order)
    mark_complete_form = OrderMarkedCompleteForm(request.POST or None, instance=order)

    if request.method == 'POST':

        if not order.shipped: 
            #Form to mark order as shipped
            if mark_shipped_form.is_valid():
                mark_shipped_form.save()
                messages.success(request, 'Congradulations on your purchase. Please proceed to leave feedback for the seller.')

                #Signal for Notification sending
                notify.send(sender=seller, recipient=buyer, verb='marked your order as shipped',
                            action_object=order, level='success', public=False, email=buyer.email)
                return HttpResponseRedirect(reverse("order_detail", kwargs={
                        'pk': order.pk}))

        #Form to mark order as shipped
        if not order.completed :
            if mark_complete_form.is_valid():
                mark_complete_form.instance.pending = False
                mark_complete_form.instance.active = False
                mark_complete_form.save()
                messages.success(request, 'Order marked as complete')

                #Signal for notification marking order complete
                notify.send(sender=buyer, recipient=seller, verb='Congradulations, on your sale. Please proceed to leave feedback for the buyer',
                            action_object=order, level='success', public=False, email=seller.email)
                return HttpResponseRedirect(reverse("order_detail", kwargs={
                        'pk': order.pk}))
    else:
        mark_shipped_form = OrderShippedForm(instance=order)
        context = {'order' : order, 'seller' : seller, 'buyer' : buyer, 'user' : user, 'shipped' : shipped, 'pending' : pending, 'disputed' : disputed, 'mark_shipped_form' : mark_shipped_form,
        'mark_complete_form' : mark_complete_form, 'completed' : completed}
        template = 'orders/order_detail.html'
        return render(request, template, context)

шаблон:

{% if order.advert.image %}
Order for: {{order.advert.title}},
<img class="product_image" src="{{ order.advert.image.url }}" >
{% else %}
<img class="product_image" src="{% static 'images/default.png' %}"></a>
{% endif %}

Date created : {{order.date}},
Last Updated :{{order.updated}},

Buyer : {{order.buyer}},
Seller : {{order.seller}},
Price : ${{order.price}},

{% if not completed %}
{% if order.payment_received %}
Payment for this order has been made.
{% if order.shipped %}
This order has been marked as shipped
{% else %}
This order is awaiting shipping
{% endif %}
{% if order.receipt %}
<img class="product_image" src="{{ order.receipt.url }}" >
{% endif %}
{% else %}
Payment pending.
{% endif %}
{% endif %}



{% if not completed %}
{% if buyer == user%}
<a class="btn btn-primary" href="{% url 'message_user' pk=order.advert.pk %}">Message {{order.seller}}</a>
{% if not order.payment_received %}
<a class="btn btn-success" href="#">Check Out</a>
{% endif %}
{% else %}
<a class="btn btn-primary" href="{% url 'message_user' pk=order.advert.pk %}">Message {{order.buyer}}</a>
{% endif %}
{% endif %}

{% if pending  %}
This order is pending.
{% endif %}

{% if completed  %}
This order has been marked as completed on {{order.updated}}.
{% endif %}


{% if disputed  %}
This order has had a disputed filed, it is under review.
{% endif %}
</p>
{% if not disputed%}
{% if user == seller and shipped == False %}
{% if order.payment_received %}

<p>Upload postage receipts and mark the order as shipped below</p>

<div class="post-form">
    <form method="POST" class='from-group' enctype="multipart/form-data" >
            {% csrf_token %}
            {{ mark_shipped_form|crispy }}
        <button class="btn btn-success" type="submit">Update</button>
        </form>
    </div>
{% endif %}
{% endif %}
{% endif %}


{% if not disputed %}
<a class="btn btn-warning" href="{% url 'order_dispute' pk=order.pk %}" >File Dispute</a>

{% else %}
<p>A dispute has been filed for this order, if you have any corresponding information or documentation to support your claim please email them to disputes@foxlisted.com.au using this 
    order number as a referance.</p>
{% endif %}

{% if not disputed %}
{% if  order.payment_received %}
{% if user == buyer and completed == False %}
<p>Mark this order as completed</p>

<div class="post-form">
    <form method="POST" class='from-group' >
            {% csrf_token %}
            {{ mark_complete_form|crispy }}
        <button class="btn btn-success" type="submit">Update</button>
        </form>
    </div>

{% endif %}
{% endif %}
{% endif %}

<a class="btn btn-primary" href="{% url 'order_list' %}">Back to orders</a>

{% endblock %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...