2017-09-19 3 views
0

J'ai donc cette erreur APRÈS que ma base de données soit remplie, mais lors de la création d'un NOUVEAU. Si je n'exécute pas mon importateur csv, j'ai écrit (cela prend juste les fichiers CSV d'une ancienne base de données, importe les modèles, crée de nouvelles instances de modèles, les remplit avec les données et les enregistre) puis ajoute un nouveau groupe (une entité dans mon application) fonctionne très bien. La forme revient vide et prêt à aller, si je lance l'importateur, puis les pauses modifier et ajouter à cette erreur:Formes cryptées erreur django: coercition en Unicode: besoin de chaîne ou de tampon, datetime.date trouvé

enter image description here

Je ne sais pas ce qui cause cela. L'importateur est assez simple. Peut-être que j'ai une parse_date de la fonction csv que j'ai mal écrit?

Usage 

provider.date_of_birth = parseDateTime(row[4])#parseDateTime(row[4]).strftime('%Y-%m-%d') 


def parseDateTime(dt): 
    try: 
    col_date_object = datetime.strptime(dt, '%m/%d/%Y') 
    except ValueError: 
    col_date_object = datetime.now() 
    return col_date_object 

Je revérifié l'importation et naviguerez sur les tables DB pour vous assurer que je n'étais pas hors d'une ligne ou une colonne ou quelque chose. En effet, les choses semblent bonnes

Le modèle en question est la suivante:

@python_2_unicode_compatible 
class Group(models.Model): 
    group_term = models.ForeignKey('GroupTerm', on_delete=models.SET_NULL, null=True, blank=True) #quesiton is can a group be termed many times? 

    group_name = models.CharField(max_length=50) 
    group_contact = models.CharField(max_length=50) 
    tin = models.CharField(max_length=50) 
    npi = models.CharField(max_length=50) 
    notes = models.TextField(max_length=255, null=True, blank=True) 
    start_date = models.DateField(auto_now=False, auto_now_add=False, null=True, blank=True) 
    end_date = models.DateField(auto_now=False, auto_now_add=False, null=True, blank=True) 
    change_date = models.DateField(auto_now=False, auto_now_add=False, null=True, blank=True) 
    change_text = models.TextField(max_length=255, null=True, blank=True) 
    term_comment = models.TextField(max_length=255, null=True, blank=True) 
    group_phone = models.CharField(max_length=50) 
    group_fax = models.CharField(max_length=50) 

    billing_address_line_one = models.CharField(max_length=50) 
    billing_address_line_two = models.CharField(max_length=50, null=True, blank=True) 
    billing_city = models.CharField(max_length=50) 
    billing_state = models.CharField(max_length=50) 
    billing_zip_code = models.CharField(max_length=50) 

    mailing_address_line_one = models.CharField(max_length=50) 
    mailing_address_line_two = models.CharField(max_length=50, null=True, blank=True) 
    mailing_city = models.CharField(max_length=50) 
    mailing_state = models.CharField(max_length=50) 
    mailing_zip_code = models.CharField(max_length=50) 

    default_location = models.BooleanField(default=True) 

    created_at = models.DateField(auto_now_add=True) 
    updated_at = models.DateField(auto_now=True) 

    class Meta: 
    ordering = ['-created_at'] 

    def __str__(self): 
    return self.group_name 

Répondre

0

Je pense que vous devrez gérer les chaînes d'abord, puis vous devez stocker au format de la date. C'est pourquoi j'ai essayé de faire ici. Coz résultat du fichier csv est une chaîne. Supposons qu'il existe un fichier CSV comme celui ci-dessous.

year,month,day,hour,minute 
2017,12,31,23,59 

Vous pouvez analyser csv et créer un objet datetime.

import csv 
from datetime import date 

with open('filename.csv') as fp: 
    reader = csv.reader(fp) 
    next(reader) # skip header 
    for row in reader: 
     row = [int(r) for r in row] 
     print(date(row[1], row[2], row[0])) 

Le résultat sera comme ceci.

12-31-2016 
+0

se plaint que str n'a pas d'attribut strftime. Je devine parce que dt qui est passé est juste une chaîne de caractères du fichier csvfile? Je pense que je construisais à l'origine un objet date-heure hors de la chaîne puis le formater pour mon db. – Codejoy

+0

@Codejoy, Jetez un oeil si cela vous est utile. –

+0

Eh bien, peut-être que je pourrais reformater cette colonne avec un remplacement de piqûre. Toujours pas sûr que tout cela va résoudre le problème à portée de main – Codejoy