2014-06-24 3 views
0

나는 몇 가지 기능을 한 후 생성 된 개체의 목록을 가지고, 내가 의해 그것이 당신이 개체의 목록을 가지고 ForeignKey 관계를 사용할 수 있습니다Django 모델에서 객체 목록을 저장하는 방법은 무엇입니까?

mylist = [(u'england', u'1', u'cde', u'IMG1', u'CP1'), (u'england', u'1', u'cde', u'IMG2', u'CP1'), (u'england', u'2', u'abc', u'IMG1', u'CP1')] 

class Mymodel(models.Model): 
    batch_id = models.AutoField(primary_key=True) 
    batch_cola = models.CharField(max_length=100) 
    batch_colb = models.CharField(max_length=100) 
    batch_colc = models.CharField(max_length=100) 
    batch_cold = models.CharField(max_length=100) 
    batch_cole = models.CharField(max_length=100) 
+0

당신이 https://docs.djangoproject.com/en/1.6/intro을 읽을 do.please 하려는지/tutorial01/# playing-with-the-api –

+0

목록을 반복하면서 각 튜플의 값을 사용하여 세 개의 Mymodel 인스턴스를 만들려고하십니까? – dannymilsom

+0

@dannymilsom 예 정확히 – batman

답변

0

잘 설명되어 있습니다 - 하나 개의 솔루션은 튜플의리스트를 루프이며, 모델 클래스에 적절한 키워드 인수를 전달하고 전화 - creating objects

그러나 명시 적으로 질문을 anwser하기 참조 save(). 마지막 비트는 중요합니다. 그렇지 않으면 데이터베이스 레벨 트랜잭션이 없습니다.

for t in mylist: 
    Mymodel(batch_cola=t[0], batch_colb=t[1], 
      batch_colc=t[2], batch_cold=t[3], 
      batch_cole=t[4]).save() 

또한 모델 관리자의 편리 create() 기능을 사용할 수 있습니다 - 당신은 .save()를 호출 할 필요가 없습니다. 선호 그래서 그 다소 문제 -

for t in mylist: 
    Mymodel.object.create(batch_cola=t[0], batch_colb=t[1], 
      batch_colc=t[2], batch_cold=t[3], batch_cole=t[4]) 

워드 프로세서는 두 equivalent을 것을 말한다.

사이드 노트에는 클래스를 만들 때 따라야하는 Python의 명명 규칙이 있습니다. "클래스 이름에는 일반적으로 CapWords 규칙을 사용해야합니다."-see PEP-8 guidelines

class MyModel(models.Model): 
    ... 
+0

덕분에, 많이 사용 Mymodel.objects.create() 훌륭한 작품! – batman

+0

위대한 - 이것을 볼 수 있으면 대답으로 받아들이십시오 (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work 참조) – dannymilsom

0

쿼리 설정 작업을 "포함"시도 장고 모델 에 저장하려면 부모 개체.

예 : 다음

class Parent(models.Model): 
    name = models.TextField() 

class Child(models.Model): 
    name = models.TextField() 
    parent = models.ForeignKey(Parent) 

:

p = Parent.objects.create(name="p") 
c = p.child_set.create(name="c") 
c2 = p.child_set.create(name="c2") 

p.child_set.count() # Should be 2 

자세한 내용은 장고 외래 키 문서를 참조. 모델의 새로운 인스턴스를 생성

3

당신은 bulk_create 방법을 사용할 수 있습니다 - 무엇인가 :

Mymodel.objects.bulk_create([Mymodel(**{'batch_cola' : m[0], 
             'batch_colb' : m[1], 
             'batch_colc' : m[2], 
             'batch_cold' : m[3], 
             'batch_cole' : m[4]} 
          for m in mylist]); 
+0

이것은 대답이어야합니다 - 데이터베이스에 반복적으로 이동하는 대신 단일 쿼리에서 모든 항목을 만듭니다. –

관련 문제