управляющий ManyToManyField для себя в Django - PullRequest
1 голос
/ 27 сентября 2010

У меня есть следующая модель:

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 - не должно иметь значения, кто кого добавил. Как я могу справиться с этим?

1 Ответ

1 голос
/ 11 августа 2013

Docs . Документы говорят, чтобы передать "я" (как строка).

Также, посмотрите этот вопрос .

Удачи. Надеюсь, вы преуспеете в развитии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...