У меня есть следующая модель:
class MyUser(User):
# some fields...
contact = models.ManyToManyField("self", through='Contact', symmetrical=False, related_name="contact_set" )
class Contact(models.Model):
user1 = models.ForeignKey( MyUser, related_name="contact_set1")
user2 = models.ForeignKey( MyUser, related_name="contact_set2")
confirmed = models.BooleanField()
и этот вид для создания контакта
def add_contact( request, username=None ):
if username:
try:
user = MyUser.objects.get(username=username)
except User.DoesNotExist:
user = None
if user:
contact = Contact( user1 = MyUser.objects.get(pk=request.user.id), user2=user, confirmed=False )
contact.save()
return render_to_response( "accounts/add_contact.html", {'user': user,} )
else:
return HttpResponseRedirect("/home")
def list_contacts( request, username=None ):
if username:
try:
user = MyUser.objects.get(username=username)
except User.DoesNotExist:
user = None
else:
user = MyUser.objects.get(pk=request.user.id)
if user:
contacts = user.contacts.all()
return render_to_response("accounts/list_contacts.html", {'contacts': contacts,} )
else:
return HttpResponseRedirect("/home")
Хорошо, теперь ... код должен быть достаточно многословным, поэтому я кратко объясню это: социальные сети, пользователи добавляют других в свои контакты («друзья», «приятели», как бы вы их ни называли). Если пользователь A добавляет пользователя B, B также находится в контакте с A ...
Код работает ... но только в одну сторону. Если я вошел как пользователь A и хочу добавить пользователя B в мои контакты, B появится в моем списке контактов, но не наоборот. Но я хочу также появиться в списке контактов B - не должно иметь значения, кто кого добавил. Как я могу справиться с этим?