Набор запросов в django
Мне очень нужна помощь в этом вопросе: У меня есть 3 модели User, Item и Comment, где User является внешним ключом в Item, а Item является внешним ключом в Comment. Я хочу получить все комментарии, принадлежащие определенному пользователю в моем представлении, как мне этого добиться. Ниже приведена моя модель
class User(models.Model):
name= models.CharField(max_length=200,null=True)
updated = models.DateTimeField(auto_now=True)
created = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.name
class Item(models.Model):
user = models.ForeignKey(User, on_delete=CASCADE)
name= models.CharField(max_length=200,null=True)
updated = models.DateTimeField(auto_now=True)
created = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.name
class Comment(models.Model):
user = models.ForeignKey(Item, on_delete=CASCADE)
name= models.CharField(max_length=200,null=True)
updated = models.DateTimeField(auto_now=True)
created = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.name
ОБНОВЛЕНО 2
Вам следует рассмотреть возможность изменения модели, как сказал amadou-sow, это правильный способ делать такие вещи
ОБНОВЛЕНО
def get_user_comments(request):
qs = Comment.objects.filter(user__user=request.user)
Вы можете получить доступ к связанным с вами объектам с помощью "__" (двойного _) подробнее читайте в официальных документах
И вам действительно следует переименовать поле "user" в "item" в модели Comment, если оно является внешним ключом к модели Item, вот так:
class User(models.Model):
name= models.CharField(max_length=200,null=True)
updated = models.DateTimeField(auto_now=True)
created = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.name
class Item(models.Model):
user = models.ForeignKey(User, on_delete=CASCADE)
name= models.CharField(max_length=200,null=True)
updated = models.DateTimeField(auto_now=True)
created = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.name
class Comment(models.Model):
item = models.ForeignKey(Item, on_delete=CASCADE)
name = models.CharField(max_length=200,null=True)
updated = models.DateTimeField(auto_now=True)
created = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.name
#view.py
def get_user_comments(request):
return Comment.objects.filter(item__user=request.user)
существует проблема модели проектирования в вашем коде.
вот как вы можете это сделать.
class Comment(models.Model):
item = models.ForeignKey(Item, on_delete=CASCADE) # the related item
author = models.ForeignKey(User,on_delete=CASCADE) #new ( the author of the comment)
updated = models.DateTimeField(auto_now=True)
created = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.name
Теперь в вашем файле views.py вы можете сделать что-то вроде этого.
Comment.objects.filter(author=request.user)