2011-03-17 4 views
1

새로운 인스턴스 (행)를 저장하려는 모델이 있습니다. ForeignKey에 대한 기본 키가 있지만 개체 자체가 없습니다 (어딘가에서 온 것으로 가정). 원시 SQL없이 인스턴스를 확보 할 필요없이 저장할 수있는 방법이 있습니까?외부 객체 인스턴스를 검색하지 않고 ForeignKey를 저장하는 방법은 무엇입니까?

class UserLocale(models.Model): 

    user = models.ForeignKey(KingUser) 
    locale = models.ForeignKey(Locale) 

가 지금은 로케일 기본 키 ('ko 페이지를')이 있지만이 객체 자체가없는 가정 : 여기

모델이다. 내가 원시 SQL 한 단계에서 그것을 할 수있어

def save_locale(user_instance, locale_name): 
    locale = Locale.objects.get(pk=locale_name) 
    UserLocale.objects.create(user=user_instance, locale=locale) 

,하지만 난 장고 쿼리 모델에서 그것을 할 수 있는지 궁금 해서요 : 내가 그것을 저장하고 있어요 것은 이것이다.

편집 :

예, UserLocale는 M2M 중간 테이블입니다. ManyToMany 필드를 만드는 것이 좋겠지 만 레거시 코드입니다.

def save_raw_sql(user_instance, locale_name): 

    query = """ 
      INSERT INTO 
       project_userlocale (user_id, locale_id) 
      values (%s, %s) 
      """ 

    UserLocale.objects.raw(query, [user_instance.id, locale_name]) 

답변

3

당신은 방금 외래 키 객체를 기본 id 필드를 사용할 수 있습니다

UserLocale.objects.create(user=user_instance, locale_id=locale) 

(사실 UserLocale을 했어야 마지막 라인에서의 Locale에 대한 참조를 가정).

+0

생각보다 간단합니다. 감사합니다. – Piva

0
def save_locale(user_instance, locale_name): 
    user_locale = UserLocale() 
    user_locale.user = user_instance 
    user_locale.locale_id = locale_name 
    user_locale.save() 

유 객체를 호출 할 경우, 당신은 .locale이 : 여기

내 SQL 시도 (필자는 코드에서 떨어져있어 어떠한 검사가 내가 손을 writting없는거야)입니다 Locale 클래스에 대한 참조 인 atribute 및 필드의 실제 값이 들어있는 .locale_id

관련 문제