0

When making a POST request to DRF, I receive the error, this field is required. I have tried different code and other solutions on SO, but without any success. Any help is appreciated.

Following are snippets of my code:

views.py

class CampaignCreateAPIView(APIView):
  renderer_classes = [CampaignRenderer]
  permission_classes = [IsAuthenticated]
  def post(self, request, format=None):
    print(request.data)
    print(request.user)
    serializer = CampaignCreateSerializer(data=request.data)
    if serializer.is_valid(raise_exception=True):
        serializer.save(user=self.request.user)
        return Response({'msg':'Campaign Creation Successful'}, status=status.HTTP_201_CREATED)

renderers.py

from rest_framework import renderers
import json

class CampaignRenderer(renderers.JSONRenderer):
  charset='utf-8'
  def render(self, data, accepted_media_type=None, renderer_context=None):
    response = ''
    if 'ErrorDetail' in str(data):
      response = json.dumps({'errors':data})
    else:
      response = json.dumps(data)
    
    return response

serializers.py

class CampaignCreateSerializer(serializers.ModelSerializer):

    class Meta:
        model = Campaign
        fields = ['owner', 'title', 'description', 'target', 'deadline']

urls.py

urlpatterns = [
    path('campaigns/create/', CampaignCreateAPIView.as_view(), name='campaign-create'),
]

models.py

class Campaign(models.Model):
    project_id = models.IntegerField(primary_key=True)
    owner = models.ForeignKey(User, related_name='campaigns', on_delete=models.CASCADE)
    title = models.CharField(max_length=30)
    description = models.CharField(max_length=30)
    target = models.IntegerField()
    deadline = models.DateField()
    amount_collected = models.IntegerField()
    donors = models.ManyToManyField(Donor, blank=True)

    def __str__(self):
        return self.title

React client side:

  const handleSubmit = async (e) => {
    e.preventDefault();
    // console.log({ form, access_token });
    const res = await createCampaign({ form, access_token });
    if (res.error) {
      console.log(typeof res.error.data.errors);
      console.log(res.error.data.errors);
      setServerMsg({});
      setServerError(res.error.data.errors);
    }
    if (res.data) {
      console.log(res.data);
      setServerError({});
      setServerMsg(res.data);
      console.log("Success");
      navigate("/");
    }
  };

Thank you.

I tried changing the generic API class that was used.

JHAN
  • 1
  • 1
  • please check this link https://stackoverflow.com/questions/13873904/this-field-is-required-error-in-django – inkredusk Apr 01 '23 at 13:59
  • this field refers to what field please share image of the error. Mostly this could be related with React side code as such your form is not passing a particular required field – ash Apr 01 '23 at 15:08

1 Answers1

0

Try to set

amount_collected = models.IntegerField(default=0)