1

J'ai une forme de modèle très simple, mais pour une raison quelconque, le code ne syncdb et renvoie une erreur: AttributeError: objet « module » n'a pas d'attributmodèle django forme

le code « CharField » est la suivante (dans mon models.py):

from django.db import models 
from django.forms import ModelForm, Textarea, forms 
from django.forms.fields import DateField, ChoiceField, MultipleChoiceField 

class SubmitJobDTP(models.Model): 
    SERVICE_CHOICES = (
     ('blog', (
      ('DTP1', 'cccccccccccccccccc: GBP 65.00'), 
      ('DTP2', 'vvvvvvvvvvvvvvvvvv: GBP 110.00'), 
      ('DTP3', 'bbbbbbbbbbbbbbbbbb: GBP 175.00')) 
     ) 
    ) 
    package = models.CharField(max_length=5, choices=SERVICE_CHOICES) 
    firstname = models.CharField(max_length=25) 
    lastname = models.CharField(max_length=25) 
    contact_number = models.CharField(max_length=25) 
    email_address = models.EmailField()  
    attachment_1 = models.FileField(upload_to='uploadir') 
    attachment_2 = models.FileField(upload_to='uploadir') 
    attachment_3 = models.FileField(upload_to='uploadir') 
    attachment_4 = models.FileField(upload_to='uploadir') 
    attachment_5 = models.FileField(upload_to='uploadir') 
    comments = models.CharField(max_length=150) 

class SubmitJobForm(ModelForm): 
    attachment_1 = forms.FileField(label='Attach file 1',required=False) 
    attachment_2 = forms.FileField(label='Attach file 2',required=False) 
    attachment_3 = forms.FileField(label='Attach file 3',required=False) 
    attachment_4 = forms.FileField(label='Attach file 4',required=False) 
    attachment_5 = forms.FileField(label='Attach file 5',required=False) 
    package = forms.CharField(required=False) 
    firstname = forms.CharField(required=False) 
    lastname = forms.CharField(required=False) 
    contact_number = forms.IntegerField(required=False) 
    email_address = forms.EmailField(required=False) 

    class Meta: 
     model = SubmitJobDTP 
     fields = ('package', 'first name', 'last name', 'contact_number', 
      'email_address', 'comments', 'attachment_1', 'attachment_2', 
      'attachment_3', 'attachment_4', 'attachment_5') 

Un code dpasted est: http://dpaste.com/607823/

Je me demande ce que le problème pourrait être: le FileField correctement de la ModelForm syncdb, mais les autres domaines: Charfield, IntegerField et EmailField ne semble pas fonctionner. J'ai lu les docs de django sur la forme de modèle et je ne peux pas sembler trouver n'importe quoi particulièrement lié à cette erreur.

Toutes les suggestions seraient beaucoup apperciated.

+0

Je suggère lecture.Jusqu'à (https://docs.djangoproject.com/en/dev/ref/django-admin/#syncdb) sur ce 'syncdb' le fait - il ne touche pas les classes' ModelForm', il crée des tables définies par les sous-classes 'django.db.models.Model'. Essayez d'exécuter './manage.py shell' ou toute autre commande de gestion et vous verrez que vous avez une erreur de syntaxe d'importation dans votre code,' depuis django.forms import ModelForm, Textarea, forms' –

+1

@James, un mot sur comment vous utilisez des formulaires. Un ModelForm est conçu pour minimiser la quantité de code personnalisé que vous devez écrire. En déclarant chaque champ qui existe déjà dans le modèle, vous créez effectivement un formulaire standard. En savoir plus sur ModelForms, et économisez du temps et des bugs. –

Répondre

5

Vous n'êtes pas en train d'importer le module de formulaires.

>>> from django.forms import forms 
>>> forms.CharField 
Traceback (most recent call last): 
    File "<console>", line 1, in <module> 
AttributeError: 'module' object has no attribute 'CharField' 
>>> from django import forms 
>>> forms.CharField 
<class 'django.forms.fields.CharField'> 

Alors, vous voulez changer vos importations à ce qui suit:

from django import forms 

ensuite faire référence à un ModelForm:

class SubmitJobForm(forms.ModelForm): 
+0

Merci beaucoup Josh! J'ai presque perdu 4 heures à essayer de comprendre ça! – AJW

0

Vous pouvez en haut de l'aide forms.py

à partir des formulaires d'importation django.forms
au lieu de cette utilisation
des formes import django