2013-07-09 36 views
0

我试图将列表保存到manyToManyfield,但我需要使用对象的ID旁边的另一个字段。我希望它匹配反对所谓extid保存列表为manytomany字段不使用ID字段

这里领域的列表是我的模型:

class Used_benefit(models.Model): 
    name = models.CharField(max_length=255) 
    extid = models.PositiveIntegerField(verbose_name="External ID") 

    def __unicode__(self): 
     return self.name 


class UserProfile(AbstractUser): 
    benefits = models.ManyToManyField(Used_benefit, blank=True, null=True, related_name="benefits_used") 
    updated = models.DateTimeField(blank=True, null=True)  

    objects = UserManager() 

这里是我尝试保存的对象:

webuser = UserProfile.objects.get(username__exact=user_id) 
productlist = soup.personrecord.productlist.string #The list looks like this: 1,2,6 


if productlist: 
    webuser.benefits.add(benefits__extid=productlist) 


webuser.save() 

但是这种方法不工作。我需要做些什么来解决它?

回答

1
if productlist: 
    productlist = productlist.split(",") 
    webuser.benefits.add(*Used_benefit.objects.filter(extid__in=productlist)) 

,除非你正在做其他更改WEBUSER对象不需要webuser.save()

+0

太棒了!谢谢!不应该在'if productlist'之后分割列表吗?不确定如果产品清单是空的或丢失会发生什么? –

+0

是的,你是对的,在'if productlist'之后分割它。如果你分割空字符串,你会得到'['']'。另外请注意,我添加了'*'来展开'add'参数 – draganHR

+0

非常好!再次感谢你。 –