2012-04-27 21 views
10

Mam Tastypie ModelResource, który pobiera swoje pola z regularnego modelu Django. Chciałbym, aby niektóre pola były tylko do odczytu na zasobie Tastypie, mimo że można je zapisać w bazowym modelu. Czy jest to możliwe w prosty sposób?Czy mogę utworzyć pole typu testypie tylko dla odczytu?

Próbowałem następujących bezskutecznie:

def __init__(self, **kwargs): 
    super(ModelResource, self).__init__(**kwargs) 
    for f in getattr(self.Meta, 'read_onlys', []): 
     self.fields[f].read_only = True 
+0

Niestety, zapomniałem wspomnieć, że nie mogę dostać wspomniany „Hack” do pracy z zasobami/schematu, który jest generowany przez Tastypie, który jest naprawdę to, co jestem po –

+2

Ojej. Mam pracę, zmieniając read_only na readonly. Mój błąd. –

+2

nie powinno mieć superumiejętnej nazwy twojej klasy –

Odpowiedz

4

Normalnie zrobiłbym coś takiego w hydratu/proces odwodnić.

Istnieją zapewne inne sposoby,

def hydrate(self, bundle): 
    if bundle.obj.pk: 
     bundle.data['somefield'] = bundle.obj.somefield 
    else: 
     bundle.data.pop('somefield') 

    return super(MyResource, self).hydrate(bundle) 
+2

Masz rację, ale zapomniałem wspomnieć, że chciałem schematu, który Tastypie może wydrukować dla zasobu, by refelektować go, że był tylko do odczytu. Moje "rozwiązanie" robi to dla mnie. –

1

Nie jestem pewien, czy trzeba już tego, ale tu jest link do oficjalnej dokumentacji związanej readonly dziedzinach.

przykład:

class ResourceA(ModelResource): 
    read_only_field = fields.DateTimeField('attribute', readonly=True) 

Nadzieja to pomaga kogoś.

Dzięki

Powiązane problemy