Django (1.11) приложение, в котором пользователи могут совершать покупки. попытка предоставить отдельному пользователю вид покупки, привязанный к его указанной c покупке (если покупка существует). Однако запрос представления покупки перенаправляет обратно в представление профиля пользователя.
модель:
from autoslug import AutoSlugField
class Purchase(models.Model):
purchase_id = models.IntegerField(editable=False)
amount = models.IntegerField()
user = models.ForeignKey('User', on_delete=models.CASCADE, related_name='purchases')
slug = AutoSlugField(populate_from='purchase_id', default='', unique_with='user', max_length=255)
date_purchased = models.DateTimeField(auto_now_add=True)
def __str__(self):
return 'Purchase #{}, user: {}'.format(self.purchase_id, self.user)
def save(self, *args, **kwargs):
if not self.purchase_id:
purchase_id = str(uuid.uuid4().int)
self.purchase_id = int(purchase_id[-9:])
if not self.slug:
self.slug = self.purchase_id
return super(Purchase, self).save(*args, **kwargs)
urls:
# base profile view
url(r'^user/(?P<username>[0-9a-zA-Z_]*)$', views.user_profile, name="user_profile"),
# purchase view
url(r'^user/(?P<username>[0-9a-zA-Z_]*)/purchase/(?P<slug>[-\w]+)$', views.user_purchase, name="user_purchase"),
представление покупки:
from .models import User, Purchase
def user_purchase(request, username, slug):
user = get_object_or_404(User, username=username)
purchase = get_object_or_404(Purchase, slug=slug, user=user)
context = {
'user': user,
'purchase': purchase
}
# also confirmed this html file exists in the correct folder
return render(request, 'users/user_purchase.html', context)
в шаблоне базового профиля мой URL:
{% if purchases %}
{% for p in purchases %}
<a href="{% url 'user_purchase' user.username p.slug %}">View purchase</a>
{% endfor %}
{% endif %}
при запуске localhost (локальный сервер) при просмотре профиля, я вижу мою фиктивную покупку и зависание на URL, я вижу правильный маршрут: localhost:8000/user/user1/purchase/111111111
и если я рендерим {{p.slug}}, это 111111111
, где я могу увидеть в базе данных (локальная оболочка) для Purchase.objects.filter (). Values () <QuerySet [{'id': 2, 'purchase_id': 111111111, 'user_id': 1, 'slug': '111111111' ... }]
все же, когда я нажимаю на ссылку, запрос переходит на HTTP GET /user/user1
, и меня перенаправляют обратно в представление базового профиля. насколько я могу судить, у меня есть правильный URL-маршрут, и он передает правильные аргументы в запрос - есть ли причина, по которой req игнорирует аргумент slug? где я должен исследовать дальше? спасибо