2012-04-09 29 views
6

Khi một mục mới được tạo bằng cách sử dụng Tastypie, tôi muốn có thể thêm nó vào thuộc tính của người dùng là trường nhiều đến nhiều. Right Now obj_create của tôi trông như thế này:Tastypie obj_create - cách sử dụng đối tượng mới được tạo ra?

def obj_create(self, bundle, request=None, **kwargs): 
    return super(GoalResource, self).obj_create(bundle, request, user=request.user) 

Tôi muốn tạo ra các đối tượng mới, nhưng khi tôi muốn để có thể thêm nó vào goal_list thuộc tính của request.user. Nhưng, những gì tôi có ngay lập tức sẽ tạo ra đối tượng trong cơ sở dữ liệu. Làm cách nào để tạo đối tượng và sau đó thêm đối tượng đó vào thuộc tính goal_list của người dùng?

Trả lời

10

Bạn không chỉ cho chúng ta định nghĩa tài nguyên của bạn, nhưng giả sử bạn đang sử dụng tastypie.resources.ModelResource như lớp cơ sở của bạn, điều này sẽ làm việc:

def obj_create(self, bundle, request=None, **kwargs): 
    bundle = super(GoalResource, self).obj_create(
     bundle, request, user=request.user) 

    user = request.user 
    user.goals.add(bundle.obj) 
    user.save() 
    return bundle 

này được vì phương pháp obj_create của ModelResource lớp trả về một bó, trong đó có đối tượng đã lưu (bundle.obj) và bạn có thể thao tác đối tượng này theo phương pháp obj_create như được hiển thị và chỉ sau đó trả về đối tượng đó.

Tôi cũng giả định rằng request.user chứa đối tượng User hợp lệ (nghĩa là đã được xác thực), bạn cần đảm bảo nó hoạt động ở trên hoặc bạn nên thêm một số mã xử lý lỗi cho trường hợp không có.

Hy vọng điều này sẽ giúp ích:

5

Tôi chưa có đủ nhận xét để nhận xét vì vậy tôi đã tìm ra câu trả lời thứ hai. Câu trả lời ở trên là chính xác Tôi chỉ muốn thêm yêu cầu đó không còn tồn tại trong cuộc gọi obj_create nữa. Bạn có thể truy cập vào các yêu cầu hiện tại qua bundle.request:

http://django-tastypie.readthedocs.org/en/latest/resources.html#accessing-the-current-request

Cảm ơn cho câu trả lời ở trên, nó giúp tôi cũng!

+0

Câu trả lời ở mọi nơi cần được cập nhật vì điều này :) – teewuane

Các vấn đề liên quan