如何使用CSV中的外键填充Django模型

我的model.py:


# Riders models ----------------------------------------

class CategoryTeam(models.Model):


    name = models.CharField(max_length = 256)


    def __str__(self):

        return self.name


class Teams(models.Model):


    name = models.CharField(max_length = 256)

    code = models.CharField(max_length = 10)

    nation = models.CharField(max_length = 10)

    continent = models.CharField(max_length = 10)

    category = models.ForeignKey(CategoryTeam, on_delete=models.CASCADE,)


    def __str__(self):

        return self.name


#-----------------------------------------------------#

我要填充的脚本


from basic_app.models import CategoryTeam,Teams




def populateCat():

    f = open('CategoryCSV.csv')

    reader = csv.reader(f)

    next(reader)

    for row in reader:


        # Create new User Entry

        category = CategoryTeam.objects.get_or_create(name=row[0])[0]


def populateTeamat():

    f = open('FantaDS Project - Teams.csv')

    reader = csv.reader(f)

    next(reader)

    for row in reader:


        # Create new User Entry

        team = Teams.objects.get_or_create(

                                        name = row[0],

                                        code = row[1],

                                        nation = row[2],

                                        continent = row[3],

                                        category = row[4]

                                        )[0]


if __name__ == '__main__':

    print("Populating the databases Cat...Please Wait")

    populateCat()

    print('Populating Complete')

    print("Populating the databases Team...Please Wait")

    populateTeamat()

    print('Populating Complete')


牛魔王的故事
浏览 126回答 1
1回答

月关宝盒

确保在创建Teams对象时类别永远不会为空,即,值来自csv的row [4]。换句话说,如果row [4]在任何时间点都为空,则将抛出异常,因为在Model类别中是强制性外键。要么做到category = models.ForeignKey(CategoryTeam, on_delete=models.CASCADE, null=True, black=True)或确保在创建Teams对象时类别的值永远不会为空
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python