CreateModelMixin 没有POST的表单, 而且为什么必须提供queryset?
来源:5-9 drf的Apiview、GenericView、Viewset和router的原理分析

慕工程8185567
2020-04-05
为什么我用mixins.CreateModelMixin, viewsets.GenericViewSet组合起来要求我提供queryset呢?
我在另一个项目里如此使用没有报错, 而且就算加了queryset, 在drf的页面里也没有post表单
AssertionError: 'UserCreateViewSet' should either include a `queryset` attribute, or override the `get_queryset()` method.
class UserCreateViewSet(mixins.CreateModelMixin, viewsets.GenericViewSet):
serializer_class = UserCreateSerializer
class UserCreateSerializer(serializers.Serializer):
username = serializers.CharField(max_length=20, label="用户名")
password = serializers.CharField(max_length=32, label="密码")
email = serializers.EmailField(max_length=30, label="邮箱")
nickname = serializers.CharField(default="", max_length=16, label="昵称", required=False)
real_name = serializers.CharField(default="", max_length=16, label="真实姓名", required=False)
blog = serializers.URLField(default="", label="博客", required=False)
github = serializers.URLField(default="", max_length=16, label="github", required=False)
sign = serializers.CharField(default="", max_length=16, label="个性签名", required=False)
school = serializers.CharField(default="", max_length=100, label="学校", required=False)
def validate_username(self, username):
if len(User.objects.filter(username=username) != 0):
raise serializers.ValidationError("用户已存在")
def validate(self, attrs):
return attrs
def save(self, validated_data):
user = User.objects.create(
username=validated_data['username'],
password=make_password(validated_data['password']),
email=validated_data['email']
)
UserProfile.objects.create(
user=user,
nickname=validated_data['nickname'],
real_name=validated_data['real_name'],
blog=validated_data['blog'],
github=validated_data['github'],
sign=validated_data['sign'],
school=validated_data['school']
)
router = DefaultRouter()
router.register(r'user', UserCreateViewSet, basename='user')
router.register(r'problem', ProblemListViewSet)
urlpatterns = [
path("", include(router.urls))
]
写回答
1回答
-
bobby
2020-04-07
如果你确实你只有post方法可以不用设置queryset 但是如果有update和list以及retrieve方法就得加这个才行
00
Python前后端分离开发Vue+Django REST framework实战
Django REST framework课程视频,RESTFul API前后端分离开发
2880 学习 · 2467 问题
相似问题