here is the error
File "C:\Users\Joseph Mkonda\.virtualenvs\TalklineAPI-trkn4jEg\lib\site-packages\rest_framework\views.py", line 506, in dispatch
response = handler(request, *args, **kwargs)
File "C:\Users\Joseph Mkonda\.virtualenvs\TalklineAPI-trkn4jEg\lib\site-packages\rest_framework\decorators.py", line 50, in handler
return func(*args, **kwargs)
File "C:\Users\Joseph Mkonda\Desktop\GreenField-1.0\talklineapi\posts\views.py", line 28, in post_create
serializer.save(user=request.user)
File "C:\Users\Joseph Mkonda\.virtualenvs\TalklineAPI-trkn4jEg\lib\site-packages\rest_framework\serializers.py", line 212, in save
self.instance = self.create(validated_data)
File "C:\Users\Joseph Mkonda\.virtualenvs\TalklineAPI-trkn4jEg\lib\site-packages\rest_framework\serializers.py", line 962, in create
instance = ModelClass._default_manager.create(**validated_data)
File "C:\Users\Joseph Mkonda\.virtualenvs\TalklineAPI-trkn4jEg\lib\site-packages\django\db\models\manager.py", line 87, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "C:\Users\Joseph Mkonda\.virtualenvs\TalklineAPI-trkn4jEg\lib\site-packages\django\db\models\query.py", line 675, in create
obj = self.model(**kwargs)
File "C:\Users\Joseph Mkonda\.virtualenvs\TalklineAPI-trkn4jEg\lib\site-packages\django\db\models\base.py", line 543, in __init__
_setattr(self, field.name, rel_obj)
File "C:\Users\Joseph Mkonda\.virtualenvs\TalklineAPI-trkn4jEg\lib\site-packages\django\db\models\fields\related_descriptors.py", line 283, in __set__
raise ValueError(
ValueError: Cannot assign "<django.contrib.auth.models.AnonymousUser object at 0x0000025B12A2F910>": "Post.user" must be a "User" instance.
[11/Jan/2024 19:50:46] "POST /api/create/ HTTP/1.1" 500 136095
here the view
@api_view(['POST'])
def post_create(request):
serializer = PostSerializer(data=request.data)
if serializer.is_valid():
serializer.save(user=request.user)
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
and the serializer
class PostSerializer(ModelSerializer):
user = userDetailsSerializer(read_only=True)
class Meta:
model = Post
fields = [
'id',
'user',
'content',
'picture',
'published',
'updated',
]
the model
class PostManager(models.Manager):
def active(self, *args, **kwargs):
return super(PostManager, self).filter(draft=False).filter(publish__lte=timezone.now())
def upload_location(instance, filename):
PostModel = instance.__class__
obj_exist = PostModel.objects.order_by("id").last()
new_id = 1
if obj_exist:
new_id = obj_exist.id + 1
return "%s/%s" % (new_id, filename)
class Post(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
content = models.TextField()
picture = models.ImageField(upload_to=upload_location, null=True, blank=True)
published = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
objects = PostManager()
def __unicode__(self):
return self.content
def __str__(self):
return self.content
class Meta:
ordering = ['-published', '-updated']
def get_absolute_url(self):
return reverse("posts:detail", kwargs={"slug": self.slug})
def get_api_url(self):
return reverse("posts-api:detail", kwargs={"slug": self.slug})
@property
def get_content_type(self):
instance = self
content_type = ContentType.objects.get_for_model(instance.__class__)
return content_type
def create_slug(instance, new_slug=None):
slug = slugify(instance.content)
if new_slug is not None:
slug = new_slug
qs = Post.objects.filter(slug=slug).order_by('-id')
exists = qs.exists()
if exists:
new_slug = "%s-%s" % (slug, qs.first().id)
return slug