我有一个models.py:
class Skill(models.Model):
title = models.CharField(max_length=255, unique=True)
category = models.ForeignKey(
SkillCategory, default=None, null=True, blank=True
)
def __unicode__(self):
return self.title
class UserProfile(models.Model):
user = models.OneToOneField(User)
skill = models.ManyToManyField(Skill)
def __unicode__(self):
return self.user.username
在我看来,我基本上获得了一套技能,用于在登录后填充UserProfile
和模型:Skills
@login_required
def UpdateUserSkills(request):
cleaned_skills = get_skill_list(user=request.user)
user_profile, created = UserProfile.objects.get_or_create(
user=request.user
)
for s in cleaned_skills:
user_profile.skill.get_or_create(title=s)
return HttpResponseRedirect(reverse('show_user_profile'))
我的问题是 - 这种添加技能的方法是否尊重模型的独特约束,如果这样做,它是否不会为给定用户填充这些技能(如果它们已经存在)?做这样的事情可能会更好:
for s in cleaned_skills:
skill = Skill.objects.get_or_create(title=s)
user_profile.skill.get_or_create(title=skill)
尽管这似乎会产生双倍的数据库查询。
也许还有另一种更好的方法?