0

Im currently working on a webApp for a client. I never used URLField cause i always use my own URL validator inside JS, but this time i wanted to use it. The problem is that when i test the app and i pass a url like this:

tests.py

url = "https://www.youtube.com/watch?v=9P1HtbpGSCk"
data = {..., "img": img, "url":url}
response = client_superuser.post(url, data,format="multipart")

This error arraise:

{'error': {'url': [ErrorDetail(string='Please enter a valid URL.', code='invalid')]}, 'status': 422}

I also tried with different URLs but nothing change. Reading on other questions , like this, i realised that testing locally may be a problem, and that's what i'm doing.

url = models.URLField(verify_exists=False)

Or, in other words, ¿how can i turn off the URL validator?, maybe it's stupid having a URLField without validators but i don't understand with Django Docs how to properly disable some validators.

models.py

class Mision(models.Model):
  img = models.ImageField(upload_to="misiones", storage=OverwriteStorage(), default="noticias/tanque_arma3.jpg")
  usuario = models.ForeignKey(Usuario, related_name="mision", default=None, blank=False, on_delete=models.SET_DEFAULT)
  fecha = models.DateTimeField(auto_now_add=True)
  titulo = models.CharField(max_length=200, null=False, blank=False)
  subtitulo = models.CharField(max_length=200, blank=True)
  url = models.URLField(max_length=200, blank=True)

serializers.py

class MisionSerializer(serializers.ModelSerializer):
    class Meta:
        model = Mision
        fields = '__all__'

views.py

@api_view(["POST"])
def misionCreate(request):
    serializer = MisionSerializer(data=request.data)
    data = {}
    if serializer.is_valid():
        if request.user.is_superuser:
            serializer.save()
            mision = Mision.objects.get(id = serializer.data["id"])
            data["success"] = "Mision Creada con exito!"
            data["status"] = 200
            data["mision"] = serializer.data
            return Response(data, status=status.HTTP_200_OK)
        
        elif not request.user.is_superuser:
            data["error"] = "El usuario no es superuser."
            data["status"] = 401
            return Response(data, status=status.HTTP_401_UNAUTHORIZED)

        else:
            data["error"] = "El usuario no tiene tokens."
            data["status"] = 401
            return Response(data, status=status.HTTP_401_UNAUTHORIZED)
            
    else:
        data["error"] = serializer.errors
        data["status"] = 422
        return Response(data, status=status.HTTP_422_UNPROCESSABLE_ENTITY)
Matias Coco
  • 351
  • 3
  • 9

1 Answers1

0

Thanks to @AbdulAzizBarkat that makes me realise i was using two variables named "url" so i just change those variable to two different names and now it works!

The error:

url = reverse('api:mision-create')
url= "https://www.youtube.com/watch?v=9P1HtbpGSCk"

data = {'usuario': usuario.pk, "titulo":"test", "subtitulo":"test", "img": img, "url":url}
response = client_superuser.post(url, data,format="multipart")

Solved:

url = reverse('api:mision-create')
url_field= "https://www.youtube.com/watch?v=9P1HtbpGSCk"

data = {'usuario': usuario.pk, "titulo":"test", "subtitulo":"test", "img": img, "url":url_field}
response = client_superuser.post(url, data,format="multipart")

Matias Coco
  • 351
  • 3
  • 9