I am trying to send a POST request to my view to create an object using DRF. The GET request in the same view works fine, but I can't seem to create the object.
Here is my model:
class Project(models.Model):
created = models.DateTimeField(auto_now_add=True)
owner = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='owned_projects', blank=True, null=True)
admins = models.ManyToManyField(settings.AUTH_USER_MODEL, blank=True)
title = models.CharField(max_length=255)
slug = models.SlugField(max_length=255, blank=True, null=True)
users = models.ManyToManyField(settings.AUTH_USER_MODEL, blank=True, related_name='teams')
def __str__(self):
return self.title
def save(self, *args, **kwargs):
self.slug = slugify(self.title)
super(Project, self).save(*args, *kwargs
Here is my view:
class ProjectsListCreateAPIView(generics.ListCreateAPIView):
serializer_class = ProjectSerializer
permission_classes = [permissions.IsAuthenticated]
def get_queryset(self):
owned_projects = Project.objects.filter(owner=self.request.user)
assigned_projects = self.request.user.project_set.all()
return sorted(
chain(owned_projects, assigned_projects),
key=attrgetter('created')
)
Here is my serializer:
class ProjectSerializer(serializers.ModelSerializer):
class Meta:
model = Project
fields = ['id', 'created', 'owner', 'title', 'slug']
Here is the error that I am getting:
ValueError at /projects/
Cannot force both insert and updating in model saving.
What am I doing wrong here?
I deleted the save method override and created the slug in the my signals file with the following code. This solved the problem.
@receiver(post_save, sender=Project)
def function_name(sender, instance=None, **kwargs):
if not instance.slug:
instance.slug = slugify(instance.title)
instance.save()
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.