2017-06-04 23 views
0

我是网络开发新手,所以这个问题可能不是直接的,但请耐心等待。我在一个社交网络上工作,用户可以通过两种不同的方式跟踪另一个用户......安然通道......我创建了两个模型来定义关系。多对多的关系如下。Django多对多的误区

如何让这个模型完全独立于对方?所以可以说一个用户可以有500个粉丝和200个访客?

我使用下面的JavaScript代码来切换按钮,但它增加了两个。这可能不是问题的一个很好的概述,但那是因为我对此很陌生。但请尝试。顺便说一句,我正在使用Django。

class Follower(models.Model): 
    user_from = models.ForeignKey(User, related_name='rel_from_set') 
    user_to = models.ForeignKey(User, related_name='rel_to_set') 
    created = models.DateTimeField(auto_now_add=True, db_index=True) 

class Meta: 
    ordering = ('-created',) 

def __str__(self): 
    return "{} is now a following".format(self.user_from, self.user_to) 

class Guests(models.Model): 
    user_fromt = models.ForeignKey(User, related_name='yel_from_set') 
    user_tot = models.ForeignKey(User, related_name='yel_to_set') 
    created = models.DateTimeField(auto_now_add=True, db_index=True) 

class Meta: 
    ordering = ('-created',) 

def __str__(self): 
    return '{} follows {}'.format(self.user_from, self.user_to) 


User.add_to_class('follows', models.ManyToManyField('self', 
through=Guests, related_name='guest', symmetrical=False)) 

User.add_to_class('follows', models.ManyToManyField('self', 
through=Follwer, related_name='guest', symmetrical=False))  

查看

def user_follow(request): 
    user_id = request.POST.get('id') 
    action = request.POST.get('action') 
    if user_id and action: 
     try: 
      user = User.objects.get(id=user_id) 
      if action == 'follow': 
       Contact.objects.get_or_create(user_from=request.user,  
       user_to=user) 
       create_action(request.user, 'is now a fan of', user) 
      else: 
       Contact.objects.filter(user_from=request.user, 
      user_to=user).delete() 
      return JsonResponse({'status':'ok'}) 
     except User.DoesNotExist: 
      return JsonResponse({'status':'ko'}) 
     return JsonResponse({'status':'ko'}) 

回答

0

而不是具有两个独立的通过模型,具有带有type字段一个单一的模式。

+0

丹尼尔罗斯曼。请你能简要地说明一下吗?......我知道这一点。我使用“Django by Example”作为指导。谢谢 –