Foreign Key Issue - to_field not enabling a non pk foreign key on v3.7

19 views
Skip to first unread message

John Pearson

unread,
Aug 3, 2020, 7:05:28 PM8/3/20
to Django users
Hi,
I have tried a number of ways to do this but I cannot get Foreign Keys to work with non-pk values. I keep getting a int type when trying to import a charfield, 'MotorMakeName' even though this is the type of field upon which the foreign key is connected. I've included the additional ids I used to force the imports to work, however this involves manipulating data manually on the datasets which I would like to avoid. Any help much approeciatted.

Please see model below;

class MotorMakes(models.Model):
    MotorMakeName = models.CharField(max_length=50, unique=True, default=False)
    
    def __str__(self):
        return self.MotorMakeName or ''
    
    def __unicode__(self):
        return u'%s' % (self.MotorMakeName) or ''

class MotorModelsV2(models.Model):
    MotorMakeName =  models.ForeignKey(MotorMakes,on_delete=models.CASCADE,to_field='MotorMakeName', default=False)
    MotorModelName = models.CharField(max_length=50, default=False,)
    #Mkid = models.ForeignKey(MotorMakes,on_delete=models.CASCADE, default=False) ** I add this field in to force the FK to work, but it should work otherwise
    
    def __str__(self):
        return self.MotorModelName or ''

    def __unicode__(self):
        return u'%s' % (self.MotorModelName) or ''

class MotorDetail(models.Model):
    MotorMakeName2 = models.ForeignKey(MotorMakes,on_delete=models.CASCADE, default=False, null=True)
    MotorModelName = models.ForeignKey(MotorModelsV2,on_delete=models.CASCADE, default=False, null=True)
    title =  models.CharField(max_length=25, default=False,)
    fuel =  models.CharField(max_length=5, default=False,)
    body = models.CharField(max_length=5, default=False,)
    engine = models.CharField(max_length=5, default=False,)
    Mkid = models.CharField(max_length=5, default=False,)
    Mlid = models.CharField(max_length=5, default=False,)


Admin.py

import import_export
from import_export.admin import ImportExportModelAdmin
from import_export.widgets import ForeignKeyWidget
from django.contrib import admin
from .models import MotorDetail
from .models import MotorMakes
from .models import MotorModelsV2
#from .models import Users
from import_export import resources



################ Include impirt/export functions for each Model ###################

class MotorMakesFileAdmin(ImportExportModelAdmin):
    pass

class MotorModelsV2FileAdmin(ImportExportModelAdmin):
    pass

class MotorDetailFileAdmin(ImportExportModelAdmin):
    pass


class MotorMakeResource(resources.ModelResource):
    class Meta:
        model = MotorMakes
        exclude = ('is_active',)

class MotorModelResource(resources.ModelResource):
    class Meta:
        model = MotorModelsV2
        exclude = ('is_active',)

class MotorModelResource(resources.ModelResource):
    motormakename = import_export.fields.Field(
        column_name='MotorMakeName1',
        attribute='MotorMakeName1',
        widget=ForeignKeyWidget(MotorMakes, 'MotorMakeName'))

    class Meta:
        fields = ('MotorMakeName1',)

##################################################################
################ Admin Site Registration #########################
admin.site.register(MotorModelsV2, MotorModelsV2FileAdmin)
admin.site.register(MotorMakes, MotorMakesFileAdmin)
admin.site.register(MotorDetail, MotorDetailFileAdmin)
Reply all
Reply to author
Forward
0 new messages