Я пытаюсь отобразить список деревьев, которые пользователь может «сердцем» в Django, и мне не повезло.Извлечение и отображение поля ManyToMany в Django из класса OnetoOne
models.py
from django.db import models
from django.contrib.auth.models import User
class Tree(models.Model):
treeId = models.IntegerField(primary_key=True)
neighbourhood = models.CharField(max_length=128,blank=True)
commonName = models.CharField(max_length=128, blank=True)
diameter = models.FloatField(blank=True)
streetNumber = models.PositiveSmallIntegerField(blank=True)
street = models.CharField(max_length=128, blank=True)
class UserProfile(models.Model):
# This line is required. Links UserProfile to a User model instance.
user = models.OneToOneField(User)
# Tree field is used to store user's favourite trees
tree = models.ManyToManyField(Tree, blank=True)
views.py
@login_required
def favourites(request):
current_user = UserProfile.objects.get(id=request.user.id)
tree_list = current_user.tree.all()
context_dict = {'trees' : tree_list}
return render(request, 'hug/favourites.html', context_dict)
favourites.html
{% for tree in trees %}
<p>tree id - {{ tree.treeId }}</p>
<p> {{ tree.commonName|title }}</p>
{% endfor %}
Я попытался заявления печати и, похоже, не нравится эта строка кода: tree_list = current_user.tree.all()
(поскольку он ничего не печатает), и когда я запускаю код на сервере, я получаю:
UserProfile matching query does not exist.
Любой совет будет очень признателен.
Спасибо,
Спасибо, сэр. Это сделал трюк. Я использовал: 'tree_list = request.user.userprofile.tree.all()'. Мне пришлось сохранить UserProfile, так как есть другие атрибуты, которые я не включил в этот пост. И в отношении treeId - мы вытаскиваем внешний набор данных, поэтому treeId - это их уникальный ключ, но я обязательно буду помнить об этом в будущем. Еще раз спасибо. –