2010-12-09 44 views
0

Je suis nouveau à Django et avait besoin d'aide sur une erreur de vue que je reçois. J'ai écrit une vue qui affichera une table de données de "Groupes" si la méthode de demande est GET, ou affichera un formulaire pour éditer un "Groupe" particulier si la méthode de demande est POST (l'article à éditer est passé avec POST Les données).django ModelForm enregistrer le problème avec ManyToManyField

En outre, si POST sur un élément existant, j'aimerais que le formulaire soit pré-rempli avec les données que j'ai déjà dans la table pour cet élément. J'ai à peu près tout ce qu'il faut descendre, sauf quand je goto enregistrer un formulaire édité, je continue à obtenir cette erreur:

« Impossible de définir des valeurs sur une ManyToManyField qui spécifie un modèle intermédiaire »

Toute aide serait très appréciée. De plus, je suis nouveau sur tous ces trucs de développement web, donc si je fais quelque chose de complètement bête ou si je manque un concept, n'hésitez pas à me flamber en conséquence. ;-)

Modèle

class Alias(models.Model): 
    def __unicode__(self): 
     return unicode(self.alias) 
    alias = models.CharField(max_length=32) 

class Octet(models.Model): 
    def __unicode__(self): 
     return unicode(self.num) 
    num = models.IntegerField(max_length=3) 

class Group(models.Model): 
    def __unicode__(self): 
     return unicode(self.name) 
    name = models.CharField(max_length=32) #name of the group 
    id = models.AutoField(primary_key=True) #primary key 
    octets = models.ManyToManyField(Octet, through='OctetAssignment', blank=True) #not required 
    aliases = models.ManyToManyField(Alias, through='AliasAssignment', blank=True) #not required 

class OctetAssignment(models.Model): 
    octet = models.ForeignKey(Octet) #octet 
    group = models.ForeignKey(Group) #group that octet is assigned to 

class AliasAssignment(models.Model): 
    alias = models.ForeignKey(Alias) 
    group = models.ForeignKey(Group) 

Voir

def index(request): 
    if request.method == 'GET': 
     groups = Group.objects.all().order_by('name') 
     return render_to_response('groups.html', 
            { 'groups': groups, }, 
            context_instance = RequestContext(request), 
           ) 

    elif request.method == "POST": 
     g = Group.objects.get(id=request.POST['id']) 
     form = GroupEditForm(instance=g) 
     return render_to_response('groups.html', 
           { 'form': form, }, 
           context_instance = RequestContext(request), 
           ) 

def save(request): 
    if request.method == "POST": 
     form = GroupEditForm(request.POST) 
     if form.is_valid(): 
      form.save() 

     return HttpResponseRedirect('/tradedesk/groups/') # Redirect after POST 

Pour le rendre complet, voici le code de modèle de formulaire J'utilise qui rend la page de table et modifier. Modèle

<h1>Group Information</h1> 

    {% if groups %} 
     <table border=1> 

     {% for group in groups %} 

     <tr> 

     <td>{{group.name}}</td> 

     <td>{% for octet in group.octets.all %} {{octet}} {% endfor %}</td> 

     <td>{% for alias in group.aliases.all %} {{alias}} {% endfor %}</td> 

     <td>{{group.analyst}}</td> 

     </tr> 

     {% endfor %} 

     </table> 
    <br></br> 

    <form method="post" action="/groups/">{% csrf_token %} 
    <select name="id" > 
     {% for group in groups %} 
     <option value="{{group.id}}">{{group.name}}</option> 
     {% endfor %} 
    </select> 
    <input type="submit" value="Edit"> 

    </form> 
    {% endif %} 


    {% if form %} 
    <form method="post" action="/groups/save/">{% csrf_token %} 

     {{form}} 
    <br></br> 
    <input type="submit" value="Save"> 
    <form> 

    {% endif %} 



</div> 

Répondre

1

Essayez de supprimer les modèles intermédiaires OctetAssignment et AliasAssignment. Ils ne doivent être utilisés que lorsque vous souhaitez ajouter des champs personnalisés. Sinon, Django les crée et les utilise de manière transparente.

+0

Pas de dés, ça n'a pas marché. Il a effectivement cassé ma table de données sur la vue GET. – nnachefski

+0

oh attends! Cela a fonctionné, je n'étais simplement pas "en train d'ajouter" la relation avec mon script de graine DB. Merci beaucoup pour l'aide! – nnachefski