在 django

编程入门 行业动态 更新时间:2024-10-22 20:40:55
本文介绍了在 django-import-export 中处理foreignKeys的导入的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我不明白 django-import-export 模块如何处理 ForeignKeys.这是一个简单的例子:模型.py

I don't understand how django-import-export module deals with ForeignKeys. Here is a simple exemple : models.py

class TFamilies(models.Model): id_fam = models.AutoField(primary_key=True, unique=True) name_fam = models.CharField(max_length=1024, blank=True,verbose_name='Famille') class TGenus(models.Model): id_genus = models.AutoField(primary_key=True, unique=True) name_genus = models.CharField(max_length=1024,verbose_name='nom de genre') id_fam = models.ForeignKey(TFamilies, null=True, db_column='id_fam', blank=True, verbose_name='Famille')

我想允许人们添加与家庭相关的属!只有 name_genus 和 name_fam 的 CSV/XLS...(并且 id 留空).

I would like to allow people adding genus with family associated ! A CSV/XLS with only name_genus and name_fam... (and id left blank).

家族大部分时间已经存在于 DB 中,Django 只需要找到正确的 id 号...

Family already exist in DB most of the time, Django juste have to find the right id number...

admin.py

class TGenusResource(resources.ModelResource): name_fam = fields.Field(widget=widgets.ForeignKeyWidget(TFamilies, 'name_fam')) class Meta: model = TGenus import_id_fields = ['id_genus'] class TGenusAdmin(ImportExportActionModelAdmin): form = TGenusAdminForm resource_class = TGenusResource pass

此配置导致导入界面出错:

This configuration lead to error in import interface :

Line number: 1 - 'NoneType' object has no attribute 'name_fam' Traceback (most recent call last): File "/....../lib/python2.7/site-packages/import_export/resources.py", line 348, in import_data row_result.object_repr = force_text(instance) File "......./lib/python2.7/site-packages/django/utils/encoding.py", line 85, in force_text s = six.text_type(s) AttributeError: 'NoneType' object has no attribute 'name_fam'

我不明白...我也尝试过回答:django-import-export 外键字段的资源定义?有点像那里:使用django迁移django中的外键-进出口

I don't understand... I also tried answer there : django-import-export resource definition for foreignkey field? and sort of like there : Foreign Key in django migration using django-import-export

我必须使用 before_import 找到自己的匹配?

Do I have to use before_import to find myself the match ?

推荐答案

我发现你必须找到匹配的自己!更改 tablib 数据集中的值是不可能的,因此您必须对条目进行更改并将它们放回新行,然后删除旧行.

I figured out that you have to find yourself the match ! It's impossible to alterate values in a tablib dataset so you have to take entries make changes and put them back in a new line then erase the old one.

我的 excel 模板包含列 id_genus(空)、name_genus 和 id_fam 由家庭名称填充!

My excel template contains columns id_genus (empty), name_genus and id_fam filled by the name of the family !

对于登陆这里的任何人,我都会发布我的方式:

For anyone who landed here I post my way :

def before_import(self, dataset, dry_run): """ Make standard corrections to the dataset before displaying to user """ i = 0 last = dataset.height - 1 # for all lines, search for id of family given and add a new line at the bottom with it then delete the first one while i <= last: # Check if the Genus exist in DB if (TGenus.objects.filter(name_genus=dataset.get_col(2)[0].capitalize())): id_genus = TGenus.objects.filter(name_genus=dataset.get_col(2)[0].capitalize())[0].id_genus else : id_genus = '' # Check if the family exists in DB try: TFamilies.objects.get(name_fam=dataset.get_col(2)[0].capitalize()) except TFamilies.DoesNotExist: raise Exception("Family not in DB !") except TFamilies.MultipleObjectsReturned: pass # use of "filter" instead of "get" to prevent duplicate values, select the first one in all cases dataset.rpush((id_genus, dataset.get_col(1)[0], TFamilies.objects.filter(name_fam=dataset.get_col(2)[0].capitalize())[0].id_fam)) dataset.lpop() i = i + 1

非系统管理员可以使用我的 django 管理员,因此,他们可以复制不在数据库中的属或族...如果有人有更好地处理错误的想法,我想阅读它!另外,我想在预览中保留家人的名字,而不仅仅是她的身份证……如果你知道怎么做,我已经发布了另一个关于此的问题:是否可以在 django import-export 中自定义预览模板?

My django admin can be used by non sys-admin so, they can and duplicate genus or families that aren't in DB... If someone have an idea to deal with errors better, I would like to read it ! Also, I would like to keep the name of the family in the preview, not only her id... If you know how, I have posted another question about that : Is-it possible to customize the template of preview in django import-export?

更多推荐

在 django

本文发布于:2023-10-24 17:08:14,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1524518.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:django

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!