0
와 많은 관계 모델에 많은에 데이터를 삽입 나는 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)
이것은 DB 쿼리의 수를 두 배로 늘리는 것처럼 보일 수 있지만 보이지는 않습니다.
아마도 다른 방법이 있을까요?
for s in cleaned_skills:
skill = Skill.objects.get_or_create(title=s)
user_profile.skill.add(skill)
같은 제목의 기술이 이미 존재하지 않는 경우에만 기술을 생성합니다 :
대단한 답변에 감사드립니다. 두 가지 가능한 솔루션에 대한 추가 표시입니다. Django 디버그 도구 모음은 쿼리가 정확히 같은 숫자가되도록 동시에보고합니다. 그래서 좀 더 읽기 쉽기 때문에 첫 번째 솔루션을 구현할 것입니다. –