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 [email protected].
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