Django model manager objects.create tài liệu ở đâu?


85

Tôi luôn đọc rằng tôi nên sử dụng

model = Model(a=5, b=6)
model.save()

Nhưng tôi chỉ thấy có một chức năng quản lý được tạo, vì tôi thấy một ứng dụng django nguồn mở đang sử dụng nó.

model = Model.objects.create(a=5, b=6)
print model.pk
1

Vì vậy, nó được đề nghị để sử dụng nó? Hoặc vẫn được ưu tiên sử dụng phương thức .save. Tôi đoán rằng objects.create sẽ cố gắng tạo nó bất kể điều gì, trong khi save có thể lưu một đối tượng hiện có nếu pk được chỉ định.

Đây là những tài liệu tôi đã tìm thấy: https://docs.djangoproject.com/en/dev/topics/db/queries/#creating-objects


11
tại sao câu hỏi này nhận được một phiếu bầu? Tôi vừa đến đây với cùng một câu hỏi và thấy điều này hữu ích.
Ferguzz

4
Tôi cũng không biết, có lẽ mọi người nghĩ rằng điều đó thật ngu ngốc và hiển nhiên. Đừng quan tâm nhiều đến nó: P Tôi đã nhận được câu trả lời của mình, tôi rất vui. Tôi cũng đã tìm kiếm mà không có kết quả nên tôi đã hỏi.
Sam Stoelinga

Câu trả lời:



44
p = Person.objects.create(first_name="Bruce", last_name="Springsteen")

tương đương với:

p = Person(first_name="Bruce", last_name="Springsteen") 
p.save(force_insert=True)

Force_insert có nghĩa là một đối tượng mới sẽ luôn được tạo.
Thông thường bạn sẽ không cần phải lo lắng về điều này. Tuy nhiên, nếu mô hình của bạn chứa giá trị khóa chính thủ công mà bạn đã đặt và nếu giá trị đó đã tồn tại trong cơ sở dữ liệu, thì lệnh gọi tạo () sẽ không thành công với Lỗi IntegrityError vì khóa chính phải là duy nhất. Hãy chuẩn bị để xử lý ngoại lệ nếu bạn đang sử dụng khóa chính thủ công.


3

về cơ bản, tạo cũng giống như vậy. dưới đây là mã nguồn để tạo.

def create(self, **kwargs):
    """
    Creates a new object with the given kwargs, saving it to the database
    and returning the created object.
    """
    obj = self.model(**kwargs)
    self._for_write = True
    obj.save(force_insert=True, using=self.db)
    return obj

nó tạo ra một thể hiện và sau đó lưu nó.


1

Về cơ bản, hai phương pháp này là tương đương nhau . Việc sử dụng Model.objects.createcó thể được ưu tiên hơn vì nó phù hợp hơn với phong cách của Django.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.