2010-03-29 39 views
5

Làm cách nào để chuyển đối số cho phương thức lưu tùy chỉnh của tôi, giữ nguyên *args, **kwargs thích hợp để chuyển sang phương thức siêu te? Tôi đã cố gắng một cái gì đó như:chuyển đối số sang phương thức save() tùy chỉnh

form.save(my_value) 

def save(self, my_value=None, *args, **kwargs): 

    super(MyModel, self).save(*args, **kwargs) 

    print my_value 

Nhưng điều này dường như không làm việc. Tôi đang làm gì sai?

Edit: Tôi tìm thấy ví dụ này (xem tin nhắn cuối cùng, để thông qua 'sắp xếp lại'): http://groups.google.com/group/django-users/browse_thread/thread/b285698ea3cabfc9/6ce8a4517875cb40?lnk=raot

Đây thực chất là những gì tôi đang cố gắng để làm, nhưng my_value được cho là một cuộc tranh cãi bất ngờ đối với một số lý do.

+0

Bạn đang hủy bỏ các đối số trong cuộc gọi để lưu! –

+1

@Beau có nghĩa là ..? – Nikita

Trả lời

14

Đối số từ khóa phải tuân theo các đối số vị trí. Hãy thử điều này thay vì:

def save(self, my_value, *args, **kwargs): 
    .... 

hay:

def save(self, *args, **kwargs): 
    my_value = kwargs.pop('my_value', None) 
+0

Dường như không phải là lừa - python nói đó là lỗi cú pháp – Nikita

+0

bạn phải sử dụng cái thứ hai ... xem chỉnh sửa của tôi –

+3

+1 cho 'kwargs.pop'. –

2

Bạn có thể thử những điều sau đây.

Ghi đè phương pháp tiết kiệm như:

def save(self, my_val, *args, **kwargs): 
    print my_val 
    # do_something here 
    return super(MyModel, self).save(*args, **kwargs) 

On gọi phương pháp tiết kiệm như:

MyModel.save(my_val="fooooo") 

này sẽ in my_val và lưu sa nó nó.

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