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
    

Reply via email to