django URL игнорирует аргумент slug по запросу - PullRequest
1 голос
/ 12 января 2020

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? где я должен исследовать дальше? спасибо

...