выбрать идентификатор пользователя, который не вошел в систему - PullRequest
0 голосов
/ 12 апреля 2019

В этом моем представлении я получаю пользователей по их примеру с точным именем www.mysite.com/usuario1, и пока он работает, но он мне нужен в разделе фотографий, чтобы получить только фотографии этого пользователя1 и того, что пользователь1 не зарегистрированв систему.как вытащить только фотографии пользователя1?

models.py

    class Photo(models.Model):
        user = models.ForeignKey(User, on_delete=models.CASCADE)
        title = models.CharField(max_length=255, blank=True)
        file = StdImageField( upload_to='photos/', blank=False,  variations={
            'large': (600, 400),
            'thumbnail': (100, 100, True),
            'medium': (300, 200),
        })
        uploaded_at = models.DateTimeField(auto_now_add=True)

    class Negocio(models.Model):
        user = models.OneToOneField(User, on_delete=models.CASCADE)

views.py

    def profile_detail(request, username):
        if User.objects.get(username__iexact=username):
            user_details = User.objects.get(username__iexact=username)
            photos_list =  Photo.objects.filter(user=request.username.pk)
            return render(request, "profile.html", {
                "user_details": user_details, 'photos': photos_list
            })
        else:
            return render("User not found")

profile.html

        {% for photo in photos %}

          <img src="{{ photo.file.medium.url}}"class="img-thumbnail" width="200" height="200"> 

              {% endfor %}

Ответы [ 2 ]

2 голосов
/ 12 апреля 2019

Ну, вы получаете пользователя, но затем вы не передаете его в свой фотофильтр - вместо этого вы пропускаете вошедшего в систему пользователя. Просто используйте пользователя, которого вы получили:

photos_list =  Photo.objects.filter(user=user_details)

Обратите внимание, что ваша первая строка не будет выполнена, если пользователь не существует, потому что запрос вызовет исключение DoesNotExist. Лучший способ сделать это будет:

def profile_detail(request, username):
    user_details = get_object_or_40o4(User, username__iexact=username)
    photos_list =  Photo.objects.filter(user=user_details)
    return render(request, "profile.html", {
        "user_details": user_details, 'photos': photos_list
    })

, которая автоматически покажет страницу 404 (не найдена), если имя пользователя не существует.

1 голос
/ 12 апреля 2019

Вам не нужен набор запросов для фотографий, вы можете получить к ним доступ через экземпляр User, используя related_name , если вы не установили related_name, вы можете просто добавить _set к названию модели следующим образом:

photos_list =  user_details.photo_set.all()

Но вам на самом деле не нужен набор запросов в вашем представлении, в вашем шаблоне вы можете сделать это:

{% for photo in user_details.photo_set.all %}
    <img src="{{ photo.file.medium.url}}"class="img-thumbnail" width="200" height="200"> 
{% endfor %}
...