0

I would like to use GenericRelation in my app to implement "like" feature.

I have already these models:

class Activity(models.Model):
    LIKE = 'L'
    ACTIVITY_TYPES = (
        (LIKE, 'Like'),
    )
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    activity_type = models.CharField(max_length=1, choices=ACTIVITY_TYPES)
    date = models.DateTimeField(auto_now_add=True)

    content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
    object_id = models.PositiveIntegerField()
    content_object = GenericForeignKey()

    def __str__(self):
        return str(self.user)


class Post(models.Model):
    author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    title = models.CharField(max_length=200)
    text = RichTextUploadingField()
    likes = GenericRelation(Activity, related_query_name='posts')
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)


    def __str__(self):
        return self.title

I my views.py file I have line like this:

activity = Activity.objects.get(content_type=ContentType.objects.get_for_model(obj), object_id=obj.id, user=request.user)

My problem is, how I can get info that this user is already liking this post?

user9192656
  • 549
  • 3
  • 16

1 Answers1

1

If you don't have a strong reason to use generic relations, I would suggest that you don't.

Since you have a single model, Post that needs to be linked to a single model Like with some metadata, you'd be better off using a through model linking the two. Check out my answer here regarding exactly this problem.

amazonic
  • 246
  • 1
  • 7