简体   繁体   中英

Why am I getting ValueError in my Django REST view?

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM