私は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)
これは、2 倍の数の DB クエリを生成するように見えますが。
おそらく、別のより良い方法がありますか?