TypeError:字段'id'需要一个数字,但在0x048C7E90获得<django.contrib.auth.models.AnonymousUser对象>

时间:2020-07-18 08:02:43

标签: python post django-rest-framework

无法将AnonymousUser强制转换为int。您是否要使用它代替用户

我不确定如何对我的网址发出发布请求时如何调整代码以停止生成此错误。我已经为我的序列化器,视图和模型附加了代码。

class ActivitySessionSerializer(serializers.Serializer):
    activity_name = serializers.CharField(min_length=1, max_length=100)

    def create(self, validated_data):
        activity, created = Activity.objects.get_or_create(name=validated_data['activity_name'], 
        owner=self.context['request'].user)

        return ActivitySession.objects.create(activity=activity, start_time=datetime.datetime.now())



class StartSessionView(generics.CreateAPIView):
    serializer_class = serializers.ActivitySessionSerializer


    User = get_user_model()
    
    class ActivityType(models.Model):
        name = models.CharField(max_length=100)
        user = models.ForeignKey(User, on_delete=models.CASCADE)

    class Activity(models.Model):
        name = models.CharField(max_length=100)
        owner = models.ForeignKey(User, on_delete=models.CASCADE)
        activity_type = models.ForeignKey(ActivityType, on_delete=models.CASCADE, null=True, blank=True)

    class ActivitySession(models.Model):
        activity = models.ForeignKey(Activity, on_delete=models.CASCADE)
        start_time = models.DateTimeField()
        end_time = models.DateTimeField()


    urlpatterns = [
        path('starting_session/', views.StartSessionView.as_view()),
    ]

我相信我是通过换行来解决的

Activity.objects.get_or_create(name=validated_data['activity_name'], 
        owner=self.context['request'].user)

Activity.objects.get_or_create(name=validated_data['activity_name'], 
        owner=self.context['request'].user.id)

我必须专门添加id字段,而不是整个用户对象

1 个答案:

答案 0 :(得分:0)

AnonymousUser具有id=Nonepk=None,因此在这种情况下不能直接使用。相反,建议使用create an instance of user that reflects an anonymous user