2015-06-04 17 views
7

Tôi đang tìm cách để đúng cách ovverride phương thức mặc định .create() của bộ nối tiếp ModelSerializer trong Django Rest Framework để xử lý thêm tham số.Khung còn lại Django: ghi đè tạo() trong ModelSerializer chuyển một tham số bổ sung

Trong mô hình Django gốc của tôi, tôi đã ghi đè phương thức mặc định .save() để quản lý thông số extra. Bây giờ, .save() cũng có thể được gọi theo cách này: .save(extra = 'foo').

tôi phải tạo ra một ánh xạ ModelSerializer trên mô hình Django gốc:

from OriginalModels.models import OriginalModel 
from rest_framework import serializers 

class OriginalModelSerializer(serializers.ModelSerializer): 

    # model fields 
    class Meta: 
     model = OriginalModel 

Nhưng theo cách này tôi không thể vượt qua extra param với mô hình phương pháp .save().

Tôi có thể ghi đè đúng cách phương pháp .create() của lớp học OriginalModelSerializer để thực hiện (cuối cùng) thông số này extra vào tài khoản?

Trả lời

12

Hmm. điều này có thể không phải là câu trả lời hoàn hảo cho tôi không biết làm thế nào bạn muốn vượt qua "thêm" này trong (ví dụ: nó là một trường bổ sung trong một hình thức bình thường, vv)

Những gì bạn có thể muốn làm chỉ đại diện cho foo như một trường trên trình nối tiếp. Sau đó, nó sẽ có mặt trong validated_data trong create, sau đó bạn có thể làm cho create làm điều gì đó như sau

def create(self, validated_data): 
    obj = OriginalModel.objects.create(**validated_data) 
    obj.save(foo=validated_data['foo']) 
    return obj 

Bạn có thể muốn nhìn vào thực hiện mặc định của tạo cho một số trong những điều khác nó mặc dù (như loại bỏ mối quan hệ nhiều người, v.v.).

+2

Vấn đề là thông số "phụ" không phải là trường của 'OrginalModel' của tôi. Theo tôi biết, không có cách nào để thêm trường vào 'ModelSerializer' nếu nó không ánh xạ tới bất kỳ trường thông thường nào của' OrginalModel' – floatingpurr

+6

Bạn cần bật trường 'foo' từ' validated_data' trước khi chuyển nó với hàm tạo mô hình, thì câu trả lời này sẽ hoạt động. –

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