2017-02-22 7 views
0

Я использую Django ..Ожидаемый вид называться с аргументом URL ключевого слова имени рк

Вот мои просмотров

class SettingsValues(generics.ListAPIView): 
    serializer_class = SettingsSerializer 
    permission_classes = (permissions.IsAuthenticatedOrReadOnly,) 

    def get_queryset(self): 
     queryset = Settings.objects.all() 
     queryset = queryset.filter(user=self.request.user.id) 
     return queryset 

class SettingsValuesUpdate(generics.UpdateAPIView): 
    queryset = Settings.objects.all() 
    serializer_class = SettingsSerializer 
    permission_classes = (permissions.IsAuthenticatedOrReadOnly,) 

    def perform_update(self, serializer): 
     serializer.save(user=self.request.user.id) 

Вот моя модель

class Settings(models.Model): 
    user = models.OneToOneField('auth.User', related_name='settings', on_delete=models.CASCADE) 
    boolean1 = models.BooleanField(default=False) 
    boolean2 = models.BooleanField(default=False) 
    boolean3 = models.BooleanField(default=False) 
    string1 = models.CharField(max_length=100, default='No description') 

Мой serializer

class SettingsSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Settings 
     fields = ('id', 'boolean1', 'boolean2', 'boolean3', 'string1') 

class UserSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = User 
     fields = ('id', 'username', 'email', 'password' ,'settings', 'image') 
    extra_kwargs = {'password': {'write_only': True}} 

Моих URLs

url(r'^settings/?$', views.SettingsValues.as_view()), 
url(r'^updsettings/?$', views.SettingsValuesUpdate.as_view()), 

Я использую Угловые 2 или почтальон приложение не имеет значения .. Когда я вернуть настройки он работает нормально. но когда я пытаюсь обновить пользовательские настройки (PUT), он показывает ошибку

Ожидаемый просмотр SettingsValuesУдалить, чтобы вызываться с аргументом ключевого слова URL с именем «pk». Исправьте URL conf или установите атрибут .lookup_field на вид правильно

Любая идея?

EDIT

йота ответ Виней Кумар мой взгляд

class SettingsValuesUpdate(viewsets.ModelViewSet): 
    queryset = Settings.objects.all() 
    serializer_class = SettingsSerializer 
    permission_classes = (permissions.IsAuthenticatedOrReadOnly,) 

    @detail_route(methods='PUT') 
    def perform_update(self, serializer): 
     serializer.save(user=self.request.user.id) 

но есть ошибка еще что { "деталь": "Метод \" PUT \»не допускается. "}

ответ

0

попробуйте этот способ.

from django.conf.urls import include, urls 
from rest_framework import routers 

from .views import SettingsValues, SettingsValuesUpdate 

router = routers.SimpleRouter() 
router.register(r'settings', SettingsValues, base_name='setting_values') 
router.register(r'updsettings', SettingsValuesUpdate, base_name='setting_value_update') 

urlpatterns = [ 
    url(r'^', include(router.urls)), 
] 
+0

где можно добавить это? –

+0

в файле urls.py. –

+0

показывает ошибку TypeError: as_view() принимает ровно 1 аргумент (3 данных) –