我正在尝试设置 django-import-export 来处理存储在电子表格中的数据。电子表格不包含作为 ID 的外键,而是包含相关对象的(也是唯一的)名称。在我的数据库中,我将有一个外键关系Teachers谁在工作Schools分别位于Cities。
想象这是模型(摘录):
class School(models.Model):
city = models.ForeignKey(City)
name = models.CharField(max_length=200)
class Teacher(models.Model):
school = models.ForeignKey(School)
name = models.CharField(max_length=200)
Run Code Online (Sandbox Code Playgroud)
教师的电子表格可能如下所示:
school,name
Central Grammar School,John Smith
West Primary,Jane Doe
West Primary,John Doe
...,...
Run Code Online (Sandbox Code Playgroud)
如何构建SchoolResource模型,以便在导入过程中接受名称而不是 ID?
(我不能只从数据库中获取 ID,因为在某一时刻,这个想法是从头开始只使用电子表格数据启动数据库,其中不包含任何 ID。)
python django foreign-keys relationships django-import-export
我正在使用django-import-export来处理上传到我的Django管理站点的CSV文件.
当我在本地机器上运行Django时,一切正常.
当我将我的应用程序部署到Heroku时,我开始收到与tmpfile访问相关的错误:
Feb 24 14:35:12 test-staging app/web.3: ERROR 2017-02-24 22:35:12,143 base 14 139687073408832 Internal Server Error:
....
Feb 24 14:35:12 test-staging app/web.3: File "/app/.heroku/python/lib/python2.7/site-packages/import_export/admin.py", line 163, in process_import
Feb 24 14:35:12 test-staging app/web.3: data = tmp_storage.read(input_format.get_read_mode())
Feb 24 14:35:12 test-staging app/web.3: File "/app/.heroku/python/lib/python2.7/site-packages/import_export/tmp_storages.py", line 42, in read
Feb 24 14:35:12 test-staging app/web.3: with self.open(mode=mode) as file:
Feb 24 14:35:12 test-staging app/web.3: File "/app/.heroku/python/lib/python2.7/site-packages/import_export/tmp_storages.py", line 31, in open
Feb 24 14:35:12 test-staging app/web.3: return open(self.get_full_path(), mode)
Feb 24 …Run Code Online (Sandbox Code Playgroud) 如何从 django-import-export 中 ModelResource 的方法查询集中获取 request.user?
class PeopleResource(ModelResource):
class Meta:
model = People
exclude = ('id','agent', 'public_id', 'active')
def dehydrate_placeA(self, people):
...
...
def get_queryset(self):
query = People.objects.filter( ..... request.user )
return query
Run Code Online (Sandbox Code Playgroud) 对于Django模型,我使用的是django-import-export包.
手册说我可以导出目标模型中不存在的字段,如下所示:
from import_export import fields
class BookResource(resources.ModelResource):
myfield = fields.Field(column_name='myfield')
class Meta:
model = Book
Run Code Online (Sandbox Code Playgroud)
http://django-import-export.readthedocs.org/en/latest/getting_started.html
如何从模型中导出函数输出?例如Book.firstword()
我正在使用django-import-export在迁移文件中加载csv文件,据我了解,这是Django 1.7加载初始数据的当前最佳做法。这对于第一个文件效果很好:
class Country(models.Model):
ISO2 = models.CharField(max_length=2, primary_key=True)
name = models.CharField(max_length=50, unique=True)
Run Code Online (Sandbox Code Playgroud)
以及整个迁移文件的内容。请注意,ISO2是主键,因此需要添加行import_id_fields = ['ISO2']。针对以下问题的答案改编了代码:使用Django 1.7加载初始数据和数据迁移:
from django.conf import settings
import tablib
from import_export import resources
from web.models import Country
import os
import csv
# load initial data - assume it is all in web/fixtures directory
class CountryResource(resources.ModelResource):
class Meta:
model = Country
import_id_fields = ['ISO2']
fixture_dir = os.path.abspath(os.path.join(settings.PROJECT_ROOT, 'web/fixtures'))
fixture_filename = 'web_country.csv'
def load_fixture(apps, schema_editor):
fixture_file = os.path.join(fixture_dir, fixture_filename)
with open(fixture_file, 'r') as content_file:
content …Run Code Online (Sandbox Code Playgroud) 我一直在使用 Django 导入导出,以便可以从数据库中获取 csv 文件。这些 csv 文件有一些不相关的字段,因为当项目放入数据库时它们会发生更改,因此我不希望它们出现在表中。
我已遵循导入导出的文档,但似乎无法正确排除这些字段。在我的 admin.py 文件中,我有:
from import_export import resources
from import_export.admin import ImportExportModelAdmin
class ArtAdmin(ImportExportModelAdmin):
list_display = ['id', 'name', 'category', 'type', 'agent', 'authenticate', ]
search_fields = ('name', 'category', 'artist', 'id', 'authenticate', )
list_filter = ["authenticate"]
actions = [approve_art, reject_art]
class ArtResource(resources.ModelResource):
class Meta:
model = Art
exclude = ('authenticate', )
Run Code Online (Sandbox Code Playgroud)
当我进入 python manage.py shell 并让它打印出 csv 时,这就是我所期望的,但是当我使用 python manage.py runserver 然后导出它时,我仍然会看到身份验证列,有人知道吗如何解决这个问题?
我的型号:
class TreeNode(MPTTModel):
...
@property
def pay_progress(self):
return "{}/{}".format(self.annuities.exclude(fact_date=None).aggregate(Sum('total'))['total__sum'] or 0,
self.annuities.aggregate(Sum('total'))['total__sum'])
Run Code Online (Sandbox Code Playgroud)
资源:
from import_export import resources
from models import TreeNode
class TreeNodeResource(resources.ModelResource):
class Meta:
model = TreeNode
Run Code Online (Sandbox Code Playgroud)
看法:
def export_treenode_csv(request):
treenode_resource = TreeNodeResource()
dataset = treenode_resource.export()
response = HttpResponse(dataset.xls, content_type='application/vnd.ms-excel')
response['Content-Disposition'] = 'attachment; filename="TreeNode.xls"'
return response
Run Code Online (Sandbox Code Playgroud)
但是此代码仅导出存储在数据库中的字段。如何将pay_progress属性值添加到导出的报告中?
我在使用 Django-import-export 时面临当前问题:
在我的 admin.py 中:
class QuestionResource(resources.ModelResource):
category = fields.Field(
column_name='category',
attribute='category',
widget=ForeignKeyWidget(Category, 'category')
)
class Meta:
model = Question
fields = ['id', 'question', 'category', 'answer',]
# exclude = ('created', 'modified', 'verified', 'count', 'user_created')
# PREVIOUS THINGS I TRIED:
# def _post_import(model, **kwargs):
# query = self.fields['category']
# category = Question.objects.get_or_create(category=query)
# return category
# def before_import(self, dataset, dry_run, *args, **kwargs):
# query = self.fields['category']
# for q in query:
# Category.objects.get_or_create(category=q)
# def before_import_row(row, *args, **kwargs):
# category …Run Code Online (Sandbox Code Playgroud) 我正在尝试按照 Django 导入导出库(外键小部件)的指南使用外键导入数据。但我收到以下错误,我尝试添加带有标题名称 id 的附加列,但仍然收到相同的错误。
Errors
Line number: 1 - 'id'
None, 46, 19, LSD
Traceback (most recent call last):
File "/var/www/vfsc-env/lib/python3.6/site-packages/import_export/resources.py", line 635, in import_row
instance, new = self.get_or_init_instance(instance_loader, row)
File "/var/www/vfsc-env/lib/python3.6/site-packages/import_export/resources.py", line 330, in get_or_init_instance
instance = self.get_instance(instance_loader, row)
File "/var/www/vfsc-env/lib/python3.6/site-packages/import_export/resources.py", line 318, in get_instance
self.fields[f] for f in self.get_import_id_fields()
File "/var/www/vfsc-env/lib/python3.6/site-packages/import_export/resources.py", line 318, in <listcomp>
self.fields[f] for f in self.get_import_id_fields()
KeyError: 'id'Run Code Online (Sandbox Code Playgroud)
这就是我所做的。
class Clockin_Users(models.Model):
id = models.AutoField(db_column='ID', primary_key=True) # Field name made lowercase.
userid …Run Code Online (Sandbox Code Playgroud)django ×10
python ×5
django-admin ×1
excel ×1
foreign-keys ×1
heroku ×1
python-2.7 ×1
python-3.x ×1