It can be done in many ways, and is more of a math question than a LaTeX question. Dipole field lines and equipotential lines are perpendicular.
\documentclass[tikz, border=1cm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.18}
\begin{document}
\begin{tikzpicture}[
declare function={
equipotentialr=sqrt(\constant*cos(\equipotentialtheta));
equipotentialx=equipotentialr*cos(\equipotentialtheta);
equipotentialy=equipotentialr*sin(\equipotentialtheta);
fieldr=\rzero*sin(\fieldtheta)^2;
fieldx=fieldr*cos(\fieldtheta);
fieldy=fieldr*sin(\fieldtheta);
}]
\begin{axis}[
axis equal,
axis lines=none,
]
\foreach \constant in {5,10,...,50}
\addplot[
blue,
domain=-90:90, samples=50, variable=\equipotentialtheta,
smooth,
] (equipotentialx,equipotentialy);
\foreach \constant in {5,10,...,50}
\addplot[
blue,
domain=-90:90, samples=50, variable=\equipotentialtheta,
smooth,
] (-equipotentialx,equipotentialy);
\foreach \rzero in {1,...,8}
\addplot[
red,
domain=0:360, samples=50, variable=\fieldtheta,
smooth,
] (fieldx,fieldy);
\end{axis}
\end{tikzpicture}
\end{document}
Selecting a suitable section gives:
\documentclass[tikz, border=1cm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.18}
\begin{document}
\begin{tikzpicture}[
declare function={
equipotentialr=sqrt(\constant*cos(\equipotentialtheta));
equipotentialx=equipotentialr*cos(\equipotentialtheta);
equipotentialy=equipotentialr*sin(\equipotentialtheta);
fieldr=\rzero*sin(\fieldtheta)^2;
fieldx=fieldr*cos(\fieldtheta);
fieldy=fieldr*sin(\fieldtheta);
}]
\begin{axis}[
axis equal,
axis lines=none,
ymin=0, ymax=1.8,
enlargelimits=false,
]
\foreach \constant in {1,...,8}
\addplot[
domain=15:70, samples=50, variable=\equipotentialtheta,
smooth,
] (-equipotentialx,equipotentialy);
\foreach \rzero in {2,4,...,10}
\addplot[
dashed,
domain=100:165, samples=50, variable=\fieldtheta,
smooth,
] (fieldx,fieldy);
\end{axis}
\end{tikzpicture}
\end{document}
A better section and spacing can be done by setting the domain
and constants individual for each line.
Edit: Better section and spacing and without PGFPlots
\documentclass[tikz, border=1cm]{standalone}
\begin{document}
\begin{tikzpicture}[
scale=3,
declare function={
equipotentialr=sqrt(\constant*cos(\equipotentialtheta));
equipotentialx=equipotentialr*cos(\equipotentialtheta);
equipotentialy=equipotentialr*sin(\equipotentialtheta);
fieldr=\rzero*sin(\fieldtheta)^2;
fieldx=fieldr*cos(\fieldtheta);
fieldy=fieldr*sin(\fieldtheta);
}]
\pgfmathsetmacro{\constant}{0.7}
\clip (0,0) rectangle (-3.5,2.5) plot[domain=0:90, samples=50, variable=\equipotentialtheta, smooth] (-equipotentialx,equipotentialy) ;
\pgfmathsetmacro{\constant}{12}
\clip plot[domain=0:90, samples=50, variable=\equipotentialtheta, smooth] (-equipotentialx,equipotentialy);
\pgfmathsetmacro{\rzero}{1.8}
\clip (0,0) rectangle (-3.5,2.5) plot[domain=180:90, samples=50, variable=\fieldtheta, smooth] (fieldx,fieldy);
\pgfmathsetmacro{\rzero}{30}
\clip (-3.5,2.5) -- plot[domain=160:180, samples=50, variable=\fieldtheta, smooth] (fieldx,fieldy) |-cycle;
\pgfmathsetmacro{\constant}{1}
\draw plot[domain=0:90, samples=50, variable=\equipotentialtheta, smooth] (-equipotentialx,equipotentialy);
\pgfmathsetmacro{\constant}{1.3}
\draw plot[domain=0:90, samples=50, variable=\equipotentialtheta, smooth] (-equipotentialx,equipotentialy);
\pgfmathsetmacro{\constant}{1.8}
\draw plot[domain=0:90, samples=50, variable=\equipotentialtheta, smooth] (-equipotentialx,equipotentialy);
\pgfmathsetmacro{\constant}{2.5}
\draw plot[domain=0:90, samples=50, variable=\equipotentialtheta, smooth] (-equipotentialx,equipotentialy);
\pgfmathsetmacro{\constant}{3.5}
\draw plot[domain=0:90, samples=50, variable=\equipotentialtheta, smooth] (-equipotentialx,equipotentialy);
\pgfmathsetmacro{\constant}{5}
\draw plot[domain=0:90, samples=50, variable=\equipotentialtheta, smooth] (-equipotentialx,equipotentialy);
\pgfmathsetmacro{\constant}{7}
\draw plot[domain=0:90, samples=50, variable=\equipotentialtheta, smooth] (-equipotentialx,equipotentialy);
\pgfmathsetmacro{\constant}{10.2}
\draw plot[domain=0:90, samples=50, variable=\equipotentialtheta, smooth] (-equipotentialx,equipotentialy);
\pgfmathsetmacro{\rzero}{2}
\draw[densely dashed] plot[domain=100:180, samples=50, variable=\fieldtheta, smooth] (fieldx,fieldy);
\pgfmathsetmacro{\rzero}{3.2}
\draw[densely dashed] plot[domain=110:180, samples=50, variable=\fieldtheta, smooth] (fieldx,fieldy);
\pgfmathsetmacro{\rzero}{5}
\draw[densely dashed] plot[domain=120:180, samples=50, variable=\fieldtheta, smooth] (fieldx,fieldy);
\pgfmathsetmacro{\rzero}{8}
\draw[densely dashed] plot[domain=140:180, samples=50, variable=\fieldtheta, smooth] (fieldx,fieldy);
\pgfmathsetmacro{\rzero}{16}
\draw[densely dashed] plot[domain=150:180, samples=50, variable=\fieldtheta, smooth] (fieldx,fieldy);
\end{tikzpicture}
\end{document}