class Like(Model):
ip = IPAddressField()
class Thing(Model): # Вещь, которую нужно лайкать
likes = ManyToManyField(Like)
При лайке проверяешь в БД объект модели Like с данным айпишником:
1) Если его нет, создаёшь и добавляешь к своей сущности Thing.likes.create(ip=your_ip_goes_here)
2) Если есть - получаешь этот лайк и добавляешь к Thing: Thing.likes.add(like)
В общем случае будет примерно такой кусок кода:
try:
if not thing.likes.filter(ip=your_ip_goes_here).exists():
like = Like.objects.get(ip=your_ip_goes_here)
thing.likes.add(like)
except Like.DoesNotExist:
like = thing.likes.create(ip=your_ip_goes_here)
Конечно, это лишь один из вариантов.
UPD:
Исправил ошибку в коде.