Django: Запрос стекированного инлайн-объекта | ValueError at /profile Cannot query "Anthony_Jamez12": Должен быть экземпляр "Profile"
Я пытаюсь создать клон Instagram. Итак, я пытаюсь сделать запрос к фотографиям пользователя, которые были загружены, и отобразить их на фронтенде. Когда я делаю запрос в стековой модели Uploads, я могу получить фотографии для отображения на фронтенде, но не фотографии, принадлежащие пользователю (все фотографии в базе данных отображаются на фронтенде). Я пытался найти способ заставить все фотографии перейти в расширенную модель пользователя, но не смог найти способ сделать это. В основном я пытаюсь получить изображения, которые загрузил пользователь, и если кто-то может помочь, я буду очень признателен.
models.py
class Profile(models.Model):
user = models.OneToOneField(User, on_delete = models.CASCADE, null = False, blank = True)
first_name = models.CharField(max_length = 50, null = True, blank = True)
last_name = models.CharField(max_length = 50, null = True, blank = True)
phone = models.CharField(max_length = 50, null = True, blank = True)
email = models.EmailField(max_length = 50, null = True, blank = True)
bio = models.TextField(max_length = 300, null = True, blank = True)
profile_picture = models.ImageField(default = 'default.png', upload_to = "img/%y", null = True, blank = True)
#uploads = models.ForeignKey(Uploads, on_delete = models.CASCADE, default = None, null = True)
def __str__(self):
return f'{self.user.username} Profile'
class Uploads(models.Model):
caption = models.CharField(max_length = 100, blank=True)
image = models.FileField(upload_to = "img/%y", blank=True, null = True)
profile = models.ForeignKey(Profile, on_delete = models.CASCADE, default = None, null = True)
id = models.AutoField(primary_key = True, null = False)
def __str__(self):
return self.caption and str(self.image)
views.py
def profile(request):
img = Uploads.objects.filter(profile_id = request.user) #Here is my error and question
#img = Uploads.objects.all()
profile = Profile.objects.filter(user = request.user)
context = {"profile": profile, "img": img}
return render(request, "main/profile.html", context)
Вот визуальное представление моделей, если это поможет понять, что я пытаюсь получить.
Сделайте это как :-
def profile(request):
img = Uploads.objects.filter(profile_id = request.user)
#img = Uploads.objects.all()
# Changed this line
profile = Profile.objects.filter(user = request.user.profile)
context = {"profile": profile, "img": img}
return render(request, "main/profile.html", context)
def profile(request):
img = Uploads.objects.filter(profile_id = request.user)
Вы передаете объект типа User в profile_id, который требует int или если profile, то требуется объект Profile. Измените его на
profile = Profile.objects.filter(user = request.user)
img = Uploads.objects.filter(profile_id = profile.id)
context = {"profile": profile, "img": img}
ИЛИ
img = Uploads.objects.filter(profile__user = request.user)
profile = Profile.objects.filter(user = request.user)
Спасибо PrOgRaMmEr и ABHISHEK TIWARI, это то, что мне нужно было изменить.
def profile(request):
img = Uploads.objects.filter(profile_id = request.user.profile)
profile = Profile.objects.filter(user = request.user)
context = {"profile": profile, "img": img}
return render(request, "main/profile.html", context)