Mam książkę model z klucza obcego do użytkownika (właściciela książki):najlepszym sposobem, aby dodać dodatkowe pola do django-rest-ramową ModelViewSet podczas tworzenia
class Book(models.Model):
owner = models.ForiegnKey(User)
...
Utworzyłem ModelViewSet za książkę, która pokazuje książek posiadanych przez zalogowanego użytkownika:
class BookViewSet(viewsets.ModelViewSet):
model = Book
serializer_class = BookSerializer
def get_queryset(self):
return Book.objects.filter(owner=self.request.user)
teraz, aby utworzyć nową książkę, chcę zapisać pole obsługi z request.user, a nie z danych przesyłanych od klienta spoczynku (dla większego bezpieczeństwa). na przykład:
def create(self, request, *args, **kwargs):
request.DATA['user'] = request.user
... (some code to create new Book from request.DATA using serialize class)
ale mam ten błąd: Ta instancja QueryDict jest niezmienna. (oznacza request.DATA jest niezmiennym QueryDict i nie można go zmienić)
Czy znasz lepszy sposób dodawania dodatkowych pól podczas tworzenia obiektu ze strukturą django rest?
jak ustawić właściciela jako tylko do odczytu w klasie ModelSerializer? – Ali
Po prostu przekazuj read_only = True. Zobacz http://django-rest-framework.org/api-guide/fields.html # core-arguments –
Używam ModelSerializer, a pola są zdefiniowane niejawnie z pól modelu. – Ali