импортировать модели Django с ForeignKeyWedget - PullRequest
1 голос
/ 11 декабря 2019

У меня есть 3 модели (проекты, сайты, устройства). И я пытаюсь импортировать устройства и настроен с ForeignKeyWedget, чтобы связать Project и Sites по имени (не pk). Когда я пытаюсь импортировать файл в формате csv, я не вижу ошибок и не вижу новых устройств в списке устройств. Можете посоветовать, если что-то отсутствует или не так? Спасибо

models.py

class Projects(models.Model):
    Name = models.TextField(blank=False,default="Project Name")
    StartDate = models.TextField(blank=False,default='dd/mm/yyyy')
    EndDate = models.TextField(blank=False,default='dd/mm/yyyy')
    def __str__(self):
        return '{0}'.format(self.Name)


class Sites(models.Model):
    Name = models.TextField(blank=False, default="Site Name")
    Project = models.ForeignKey(Projects,on_delete=models.CASCADE)

    def __str__(self):
        #return 'SiteName:{} ---------------Country:{}'.format(self.Name, self.Country)
        return '{0}'.format(self.Name)


class Devices(models.Model):

    Name = models.TextField(blank=False, default='DeviceName')
    IP = models.TextField(blank=False, default='x.x.x.x')
    Project = models.ForeignKey(Projects,on_delete=models.CASCADE)
    Site = models.ForeignKey(Sites,on_delete=models.CASCADE)

    def __str__(self):
        return '{0}'.format(self.Name)

resources.py

from import_export import resources, fields
from import_export.widgets import ForeignKeyWidget
from .models import *

class DeviceRecources(resources.ModelResource):
    Project = fields.Field(
        column_name='Project',
        attribute='Project',
        widget=ForeignKeyWidget(Projects, 'Name'))
    Site = fields.Field(
        column_name='Site',
        attribute='Site',
        widget=ForeignKeyWidget(Sites, 'Name'))


    class Meta:
        model = Devices
        fields = ('Name','IP','Category','Project', 'Site','id')

view.py

def upload(request):

    if request.method == 'POST':
        devices = resources.modelresource_factory(model=Devices)()
        dataset = Dataset()
        new_devices = request.FILES['myfile']
        imported_data = dataset.load(new_devices.read().decode('utf-8'),format='csv')
        result = devices.import_data(dataset, dry_run=True)  # Test the data import
        if not result.has_errors():
            print('No errorrrrr')
            print(dataset)
            devices.import_data(dataset, dry_run=False)  # Actually import now
        return redirect(devicesview)
    else:
        return render(request,'import.html')

Отладочный вывод введите описание изображения здесь

...