Django: How do I exclude related fields when using `._meta.get_fields()`?

I’m trying to write a view in Django to export my model data in a csv file.

The problem is that I can’t figure out how to exclude related fields. Currently, when I run model._meta.get_fields(), the function returns the model’s fields and the related model’s field, so my view throws an error when I use getattr() using the related field’s name.

I tried using .is_related() to exclude related fields, but that also excludes the model fields (like ForeignKey).

When I call the field name, I can see the class name is ManyToOneRel, but I can’t figure out how to access that attribute.

Does anyone know how to exclude related fields or figure out if a field is a related model’s field?

My view is below.

Thanks to anyone that can help!

class CSVExportView(View):
    template_name = 'medrec_v2/csv_export.html'

    def get(self, request, *args, **kwargs):
        model_list = [m for m in apps.app_configs['medrec_v2'].models if '_' not in m ] 
        # print(model_list)
        context = {'model_list':model_list}
        return render(request, self.template_name, context)

    def post(self, request, *args, ):
        model_name = request.POST.get("model-sel")
        model = apps.get_model(app_label='medrec_v2',model_name=model_name)
        content_type = 'text/csv'
        datecode ='%y%m%d')
        file_name = f'{datecode}_medrecv2_{model_name}.csv'

        response = HttpResponse(content_type = content_type)
        response['Content-Disposition'] = f'attachment; filename="{file_name}"'
        header = ['.')[-1] for f in model._meta.get_fields() if f.is_relation == False]
        writer = csv.writer(response)
        for instance in model.objects.all():
            row = []
            for field in instance._meta.get_fields(include_parents=False):
                if field.is_relation == False:
                    val = getattr(instance,
                    if val is None:
                        val = ''

        return response


RelatedField has flags:

class RelatedField(FieldCacheMixin, Field):
    """Base class that all relational fields inherit from."""

    # Field flags
    one_to_many = False
    one_to_one = False
    many_to_many = False
    many_to_one = False

Then you can check these conditions:

for field in instance._meta.get_fields(include_parents=False):
    if field.concrete and not(
            field.is_relation or field.one_to_one or 
            (field.many_to_one and field.related_model)):
        val = getattr(instance,
        if val is None:
            val = ''