Hi, I am using the django_import_export package but i am not been able to import files, the tables are related. Please find the attached files(models, resources and admin) for your reference.
Please help me -- You received this message because you are subscribed to the Google Groups "Django users" group. To unsubscribe from this group and stop receiving emails from it, send an email to django-users+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/CALYpPT-j0jNMZYm7POFfW94fjjSkATEn_ZAYYn6kZx6Wyc3AfQ%40mail.gmail.com.
from django.db import models from django.utils import timezone from django.conf import settings import decimal from apps.product.models import * # ________________ Permit Information Analysis ________________ class Info(models.Model): O_PORT = [ ('Overland', 'Overland'), ('Ghana', 'Ghana'), ('By Air', 'By Air'), ('By Road', 'By Road'), ('Takoradi', 'Takoradi'), ('Tema', 'Tema'), ] PAYMENT_TYPE = [ ('Cash Against Document', 'Cash Against Document'), ('Bank Draft', 'Bank Draft'), ('Cash Against Document', 'Cash Against Document'), ('Letter of Credit', 'Letter of Credit'), ('Wire Transfer', 'Wire Transfer'), ('PrePaid', 'PrePaid'), ] exporter = models.CharField(max_length=150) buyer = models.CharField(max_length=150) vessel = models.CharField(max_length=150) date_of_transaction = models.DateField(default=timezone.now, verbose_name="Transaction Date") originating_port = models.CharField(choices=O_PORT, max_length=8, default="Ghana") city_destination = models.CharField(max_length=150, verbose_name="City of Destination") country_destination = models.ForeignKey(Country, on_delete=models.CASCADE, verbose_name="Country of Destination") contract_number = models.CharField(max_length=150, verbose_name="Contract Number") a2_form = models.CharField(max_length=50, blank=True, null=True) payment_type = models.CharField(max_length=100) negotiating_bank = models.ForeignKey(Bank, on_delete=models.CASCADE) container_or_vehicle = models.CharField(max_length=50) driver_name = models.CharField(max_length=150, blank=True) # records on user added_by = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.SET_NULL, null=True, blank=True, editable=False, verbose_name="Added By") updated_by = models.CharField(max_length=50, default='Admin', null=True, blank=True) date_added = models.DateTimeField(auto_now_add=True) permit_NUM = models.CharField(max_length=30, unique=True, verbose_name="Permit Number") class Meta: verbose_name = "Capture Permit Info" verbose_name_plural = verbose_name def __str__(self): return self.exporter # ________________ Permit ________________ class Permit(models.Model): CONVERSION = [ ('1.0000', '1.0000'), ('0.0006', '0.0006'), ('0.0007', '0.0007'), ('0.0010', '0.0010'), ('0.0015', '0.0015'), ] UNITS = [ ('m2', 'm2'), ('m3', 'm3'), ] CURRENCY = [ ('USD', 'USD'), ('GHS', 'GHS'), ('CFA', 'CFA'), ('Euro', 'Euro'), ] product = models.ForeignKey(Product, on_delete=models.CASCADE) specie = models.ForeignKey(Specie, on_delete=models.CASCADE) grade = models.ForeignKey(Grade, on_delete=models.CASCADE) info = models.ForeignKey(Info, on_delete=models.CASCADE) # volume volume = models.DecimalField(max_digits=19, decimal_places=3) conversion_factor = models.CharField(choices=CONVERSION, max_length=8) units = models.CharField(choices=UNITS, max_length=5, default='m3') unit_price = models.DecimalField(max_digits=19, decimal_places=2) currency = models.CharField(max_length=15) ex_rate = models.DecimalField(max_digits=19, decimal_places=4, verbose_name='Exchange Rate') def __str__(self): return self.info.exporter @property def my_value(self): val = self.volume * self.unit_price val = round(val, 2) return val @property def derived_volume(self): dv = self.volume * decimal.Decimal(self.conversion_factor) dv = round(dv, 3) return dv @property def euro_value(self): ev = self.volume * self.unit_price * self.ex_rate ev = round(ev, 2) return ev
from import_export import resources from apps.permit.models import Permit, Info from apps.product.models import * from import_export.fields import Field from import_export.widgets import ForeignKeyWidget import decimal # Resource for import nd export class PermitResource(resources.ModelResource): info__exporter = Field(column_name='Exporter', attribute='info', widget=ForeignKeyWidget(Info, 'exporter')) product__name = Field(column_name='Product', attribute='product', widget=ForeignKeyWidget(Product, 'name')) specie__name = Field(column_name='Species', attribute='specie', widget=ForeignKeyWidget(Specie, 'name')) grade__name = Field(column_name='Grade', attribute='grade', widget=ForeignKeyWidget(Grade, 'name')) info__buyer = Field(column_name='Buyer', attribute='info', widget=ForeignKeyWidget(Info, 'buyer')) info__vessel = Field(column_name='Vessel', attribute='info', widget=ForeignKeyWidget(Info, 'vessel')) info__date_of_transaction = Field( column_name='Transaction_Date', attribute='info', widget=ForeignKeyWidget(Info, 'date_of_transaction')) info__originating_port = Field( column_name='O_Port', attribute='info', widget=ForeignKeyWidget(Info, 'originating_port')) info__city_destination = Field( column_name='D_City', attribute='info', widget=ForeignKeyWidget(Info, 'city_destination')) info__contract_number = Field( column_name='ContractNo', attribute='info', widget=ForeignKeyWidget(Info, 'contract_number')) info__a2_form = Field(column_name='FormA', attribute='info', widget=ForeignKeyWidget(Info, 'a2_form')) info__payment_type = Field( column_name='Pmt_Type', attribute='info', widget=ForeignKeyWidget(Info, 'payment_type')) info__negotiating_bank__name = Field( column_name='Bank', attribute='info__negotiating_bank', widget=ForeignKeyWidget(Bank, 'name')) info__container_or_vehicle = Field( column_name='Container No', attribute='info', widget=ForeignKeyWidget(Info, 'container_or_vehicle')) info__driver_name = Field(column_name='Drivers_Nme', attribute='info', widget=ForeignKeyWidget(Info, 'driver_name')) info__permit_NUM = Field(column_name='PermitNo', attribute='info', widget=ForeignKeyWidget(Info, 'permit_NUM')) info__country_destination = Field( column_name='D_Country', attribute='info', widget=ForeignKeyWidget(Info, 'country_destination')) # conversion_factor = Field(column_name='Conversion Factor') # units = Field(column_name='Units') # unit_price = Field(column_name='Unit Price') # currency = Field(column_name='Currency') # ex_rate = Field(column_name='Exchange Rate') # volume = Field(column_name='Volume') # id = Field(column_name='ID') # value = Field(column_name='Value_') # derived_volume = Field(column_name='Derived Volume') # euro_value = Field(column_name='Euro Value') # def dehydrate_derived_volume(self, permit): # ans = permit.volume * decimal.Decimal(permit.conversion_factor) # return ans # def dehydrate_value(self, permit): # val = permit.volume * permit.unit_price # return val # def dehydrate_euro_value(self, permit): # ev = permit.volume * permit.unit_price * permit.ex_rate # return ev class Meta: model = Permit skip_unchanged = False report_skipped = False fields = ( 'info__exporter', 'info__buyer', 'info__vessel', 'info__date_of_transaction', 'info__originating_port', 'info__city_destination', 'info__country_destination', 'info__contract_number', 'info__permit_NUM', 'info__a2_form', 'info__payment_type', 'info__negotiating_bank__name', 'info__container_or_vehicle', 'info__driver_name', 'specie__name', 'product__name', 'grade__name', 'volume', 'conversion_factor', 'units', 'unit_price', 'currency', 'ex_rate', 'id', ) export_order = ( 'id', 'info__exporter', 'info__buyer', 'info__vessel', 'info__date_of_transaction', 'info__originating_port', 'info__city_destination', 'info__country_destination', 'info__contract_number', 'info__permit_NUM', 'info__a2_form', 'info__payment_type', 'info__negotiating_bank__name', 'info__container_or_vehicle', 'info__driver_name', 'specie__name', 'product__name', 'grade__name', 'volume', 'conversion_factor', 'units', 'unit_price', 'currency', 'ex_rate', )
from django.contrib import admin from apps.permit.models import Info, Permit from import_export.admin import ImportExportModelAdmin from django.contrib.auth.models import Group from apps.permit.resources import PermitResource from django_admin_listfilter_dropdown.filters import ( DropdownFilter, ChoiceDropdownFilter, RelatedDropdownFilter) class PermitInline(admin.StackedInline): autocomplete_fields = ['product', 'specie', 'grade'] model = Permit min_num = 1 max_num = 50 extra = 0 @admin.register(Info) class InfoAdmin(admin.ModelAdmin): # actions = None list_display = ('exporter', 'buyer', 'permit_NUM', 'date_of_transaction', 'date_added', 'added_by', 'updated_by', 'country_destination') search_fields = ('exporter', 'permit_NUM',) list_filter = ('added_by', 'date_added') ordering = ('-date_added',) date_hierarchy = 'date_of_transaction' list_per_page = 20 list_display_links = ('exporter', 'buyer', 'permit_NUM') autocomplete_fields = ['country_destination', 'negotiating_bank'] inlines = [PermitInline, ] fieldsets = ( (None, {'fields': ('exporter', 'buyer', 'vessel', 'date_of_transaction', 'originating_port', 'negotiating_bank', 'city_destination', 'country_destination', 'contract_number', 'a2_form', 'payment_type', 'container_or_vehicle', 'driver_name', 'permit_NUM')}), ) def save_model(self, request, obj, form, change): obj.updated_by = request.user.username if not obj.pk: # Only set added_by during the first save. obj.added_by = request.user super().save_model(request, obj, form, change) @admin.register(Permit) class PermitAdmin(ImportExportModelAdmin): # resource for export and import resource_class = PermitResource list_display = ('get_exporter', 'product', 'specie', 'grade', 'volume', 'conversion_factor', 'unit_price', 'currency', 'ex_rate', 'my_value', 'derived_volume', 'euro_value', 'date_of_transaction') list_filter = [('product', RelatedDropdownFilter), ('specie', RelatedDropdownFilter), ('grade', RelatedDropdownFilter), ('info__country_destination__west_africa', DropdownFilter), ('info__country_destination', RelatedDropdownFilter), ('info__payment_type', DropdownFilter), ] date_hierarchy = 'info__date_of_transaction' list_per_page = 20 search_fields = ('info__exporter', 'product__name') ordering = ('id',) # remove the ‘Add’ button def has_add_permission(self, request): return False def get_exporter(self, obj): return obj.info.exporter def date_of_transaction(self, obj): return obj.info.date_of_transaction get_exporter.admin_order_field = 'exporter' # Allows column order sorting get_exporter.short_description = 'Exporter' # Renames column head