2010-10-27 4 views
1

J'ai un système qui repose sur d'autres modèles mais que je veux rendre un peu plus ouvert car mes utilisateurs en demandent parfois un peu plus.Base de données Django se connaître

actuellement pour l'intérêt d'arguments J'ai 2 authors dans un modèle Author.

john, james 

Lorsqu'un utilisateur ajoute un livre, et le Author n'est pas disponible, comment puis-je ajouter un champ other sous la forme, que si elle est sélectionnée, génère alors un champ supplémentaire où l'utilisateur peut saisir le nom du Author et la gestion des formulaires est telle que le nouvel auteur est ajouté et sélectionné lors de la soumission?

MODELS.PY

class Author(models.Model): 
    name = models.CharField(max_length=30) 

FORMS.PY

class AuthorForm(ModelForm): 
    class Meta: 
     model = Author 

VIEWS.PY

def new(request, template_name='authors/new.html'): 

if request.method == 'POST': 
    form = AuthorForm(request.POST, request.FILES) 
    if form.is_valid(): 
     newform = form.save(commit=False) 
     newform.user = request.user 
     newform.save() 

     return HttpResponseRedirect('/') 

else: 
    form = AuthorForm() 

context = { 'form':form, } 

return render_to_response(template_name, context, 
    context_instance=RequestContext(request)) 

Répondre

1

en supposant que votre livre modèle est le suivant:

class Book(models.Model): 
    author = models.ForeignKey(Author) 
    #etc. 

essayer quelque chose comme ceci:

class BookForm(ModelForm): 
    other = forms.CharField(max_length=200, required=False) 

    def clean(self, *args, **kwargs): 
     other = self.cleaned_data.get('other') 
     author = self.cleaned_data.get('author') 
     if author is None or author == '': 
      self.cleaned_data['author'] = Author(name=other).save() 

     return self.cleaned_data 

    class Meta: 
     model = Book 

Si l'auteur serait un ManyToManyField:

BookForm classe (ModelForm): autre = forms.CharField (max_length = 200 , required = False)

def clean(self, *args, **kwargs): 
    other = self.cleaned_data.get('other') 
    author = self.cleaned_data.get('author') 
    if other is not None or other != '': 
     for newauthor in other.split(','): #separate new authors by comma. 
      self.cleaned_data['author'].append(Author(name=newauthor).save()) 

    return self.cleaned_data 

class Meta: 
    model = Book 
+0

merci beaucoup, je vais jeter un coup d'oeil et vous le faire savoir! – ApPeL

Questions connexes