Я хочу экспортировать мою базу данных в формате CSV. До сих пор «мой» код работает только для одной таблицы ...Экспорт всех моделей в файл csv
Вот мои модели:
class ActsIdsModel(models.Model):
year = models.IntegerField(max_length=4, blank=False, null=False)
...lots of other fields...
class NationRespModel(models.Model):
nationResp=models.CharField(max_length=2, unique=True)
class EUGroupRespModel(models.Model):
euGroupResp=models.CharField(max_length=50, unique=True)
class RespProposModel(models.Model):
respPropos=models.CharField(max_length=50, unique=True)
nationResp = models.ForeignKey('NationRespModel', blank=True, null=True, default=None)
euGroupResp = models.ForeignKey('EUGroupRespModel', blank=True, null=True, default=None)
class GvtCompoModel(models.Model):
gvtCompo= models.CharField(max_length=1000, blank=False, null=False)
class ActsInfoModel(models.Model):
#id of the act
actId = models.OneToOneField(ActsIdsModel, primary_key=True)
respProposId1=models.ForeignKey('RespProposModel', related_name='respProposId1', blank=True, null=True, default=None)
respProposId2=models.ForeignKey('RespProposModel', related_name='respProposId2', blank=True, null=True, default=None)
respProposId3=models.ForeignKey('RespProposModel', related_name='respProposId3', blank=True, null=True, default=None)
gvtCompo= models.ManyToManyField(GvtCompoModel)
...lots of other fields...
Я использую следующий код, чтобы экспортировать все данные из одной модели:
import csv
from django.db.models.loading import get_model
def dump(qs, outfile_path):
model = qs.model
writer = csv.writer(open(outfile_path, 'w'))
headers = []
for field in model._meta.fields:
headers.append(field.name)
writer.writerow(headers)
for obj in qs:
row = []
for field in headers:
val = getattr(obj, field)
if callable(val):
val = val()
if type(val) == unicode:
val = val.encode("utf-8")
row.append(val)
writer.writerow(row)
(источник: http://palewi.re/posts/2009/03/03/django-recipe-dump-your-queryset-out-as-a-csv-file/)
Вот как я получаю все мои модели (основная модель + модели связаны с главной):
db_queryset=ActsInfoModel.objects.select_related().all().prefetch_related('gvtCompo')
Мой вопрос: как я могу связать этот запрос с функцией дампа? До сих пор я получаю данные только ActsInfoModel ...
Должен ли я использовать этот код, используемый для отображения и проверьте все данные:
for act in db_queryset.iterator():
#ActsIdsModel
for field in act.actId.__class__._meta.fields:
print field.name, getattr(act.actId, field.name)
#ActsInformationModel
for field in act.__class__._meta.fields:
print field.name, getattr(act, field.name)
#RespProposModel (3 respPropos)
for index in xrange(1,4):
index=str(index)
try:
print getattr(act, "respProposId"+index).respPropos
print getattr(act, "respProposId"+index).nationResp.nationResp
print getattr(act, "respProposId"+index).euGroupResp.euGroupResp
except Exception, e:
print "exception", e
#NPModel (gvtCompo)
for gvtCompo in act.gvtCompo.all():
print "gvtCompo", gvtCompo.gvtCompo
Могу ли я использовать это для экспорта всех моделей, связанных с основным ActsInfoModel? Я читал «Если вы экспортируете все данные по одной модели» ... – rom