2011-12-01 4 views
5

này là đại diện của các mô hình của tôi:Django: Tiết kiệm lĩnh vực nhiều ManyToMany trong một giao dịch

class B(models.Model): 
    """I'm a dummy model, so doesn't pay atention of what I do""" 
    name = models.CharField(max_length=250) 

class A(models.Model): 
    name = models.CharField(max_length=250) 
    many_b = models.ManyToManyField(B) 

Bây giờ, giả sử tôi có một danh sách các đối tượng B. Và một đối tượng A đơn lẻ sẽ liên quan đến số đó B s. Một cái gì đó như thế này:

a = A.objects.get(id=1) 
list_of_b = [B<name='B1'>,B<name='B2'>,B<name='B3'>,] 

Con đường tôi liên hệ chúng ngay bây giờ là thế này:

for b_object in list_of_b: 
    a.many_b.add(b_object) 

Có cách nào để thêm tất cả các đối tượng B trong một giao dịch duy nhất? Có thể trong một phương thức duy nhất, như:

a.many_b.addList(b) #This doesn't exist 

Trả lời

5

From the docs:

>>> john = Author.objects.create(name="John") 
>>> paul = Author.objects.create(name="Paul") 
>>> george = Author.objects.create(name="George") 
>>> ringo = Author.objects.create(name="Ringo") 
>>> entry.authors.add(john, paul, george, ringo) 

Vì vậy, nếu bạn có một danh sách, sử dụng lập luận mở rộng:

a.many_b.add(*list_of_b) 
+0

Cảm ơn! Không biết về việc mở rộng đối số. Nếu toàn bộ giao diện nằm trong một giao dịch thì cuộc gọi này có được thực hiện trong giao dịch đó không? – santiagobasulto

+1

@santiagobasulto Có, phần mềm trung gian giao dịch nên đặt tất cả viết trong một giao dịch, bao gồm cả giao dịch này. –