Mám dátový model Django takto:
class Post(django.db.models.Model):
text = django.db.models.CharField()
class Seen(django.db.models.Model):
post = django.db.models.ForeignKey(Post)
user = django.db.models.ForeignKey(django.contrib.auth.models.User)
Kde sa snažím sledovať príspevky a ktorí používatelia videli, ktoré príspevky. Ako môžem získať všetky príspevky, ktoré daný používateľ nevidel?
odpovede:
0 pre odpoveď č. 1Použitie vylúčenia:
unseen_posts = Post.objects.exclude(seen__user=user)
Kde user
je a django.contrib.auth.models.User
prípadne objekt request.user
, ak používate middleware.
Na seen__user
reťazec prechádza dozadu pozdĺž forignKey
medzi Post
a Seen
a potom vpred po foreignKey
medzi Seen
a User
.
0 pre odpoveď č. 2
Zvážte nasledujúce skutočnosti:
seen = Seen.objects.select_related("post").filter(user=request.user)
if post not in [x.post for x in seen]:
#do what you need
Poznač si to "Select_related" je tu iba vylepšenie výkonu.