How can i save data to text file from django form inputs?

Viewed 725

I wanna save form input datas to text file and storage in local. But i am also new at django. Here is my sample codes... How can i save to form datas to text file? Thanks for help.

My models.py file

from django.db import models
from django.contrib.auth.models import User
from django.urls import reverse
#from datetime import datetime, date

class Post(models.Model):
    
    #post_date = models.DateField(auto_now_add = True)
    soru1 = models.CharField(verbose_name='Ad Soyad',max_length=10000, default="")
    soru2 = models.CharField(verbose_name='Tarih', max_length=10000, default="")
    soru3 = models.CharField(verbose_name='Doğum Tarihi', max_length=10000, default="")
    soru4 = models.CharField(verbose_name='Doğum Yeri', max_length=10000, default="")
    soru5 = models.CharField(verbose_name='Medeni Hali', max_length=10000, default="")
    soru6 = models.CharField(verbose_name='Birinci Evlilik', max_length=10000, default="")

My forms.py file

from django import forms
from .models import Post

class PostForm(forms.ModelForm):
    class Meta:
        model = Post
        fields = '__all__'
        #field = ('title', 'author') yapılabilir

        widgets = {
            # 'title': forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Adınızı yazınız'}),
            # 'author': forms.Select(attrs={'class': 'form-control'}),
            # 'body': forms.Textarea(attrs={'class': 'form-control', 'placeholder': 'Adınızı yazınız'}),
            'soru1': forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Adınızı yazınız'}),
            'soru2': forms.TextInput(attrs={'class': 'form-control'}),
            'soru3': forms.TextInput(attrs={'class': 'form-control'}),
            'soru4': forms.TextInput(attrs={'class': 'form-control'}),
            'soru5': forms.TextInput(attrs={'class': 'form-control'}),
            'soru6': forms.TextInput(attrs={'class': 'form-control'}),

my views.py file

from django.shortcuts import render
from django.views.generic import ListView, DetailView, CreateView, UpdateView, DeleteView
from .models import Post
from .forms import PostForm
from django.urls import reverse_lazy
from django.db.models import Q
from django.http import HttpResponse


class HomeView(ListView):
    model = Post
    template_name = 'home.html'
    ordering = ['-id']
    #ordering sıralamayı belli ediyor, negatif id yaptık en son eklenen en başa geliyor.

class ArticleDetailView(DetailView):
    model = Post
    template_name = 'article_details.html'  
1 Answers

You can use basic Python methods open() and write(). You can access kwargs with self.get_form() in your View with form_class or similar option.

def post(self, request, *args, **kwargs):

    form = self.get_form()

    with open('text_file.txt', 'w') as file:
        file.write(f'Field_1: {form.data["field_1"]}\n')
        file.write(f'Field_2: {form.data["field_2"]}\n')
        ...

example 'text_file.txt':

Field_1: SomeValue
Field_2: another value
Field_3: 3
...
Related