2010-12-09 6 views
0

저는 장고를 처음 사용하고 있으며보기 오류에 대한 도움이 필요했습니다.django ModelForm ManyToManyField 문제 저장

요청 방법이 GET 인 경우 "그룹"의 데이터 테이블을 표시하거나 요청 방법이 POST 인 경우 특정 "그룹"을 편집하기위한 양식을 표시하는보기를 작성했습니다 (편집 할 항목이 POST와 함께 전달됨). 데이터).

또한 기존 항목에 POST를 사용하면 양식에 이미 해당 항목의 표에있는 데이터가 미리 채워지게됩니다. 나는했습니다 거의 내가 고토는 편집 양식을 저장하는 경우를 제외하고, 모두를 얻었다에게, 내가이 오류가 계속 :

"중간 모델을 지정하는 ManyToManyField에 값을 설정 할 수 없음"

어떤 도움이 될 것입니다 대단히 감사합니다. 또한, 나는이 모든 웹 dev에 물건에 새로운이야, 그래서 만약 내가 뭔가 바보 같은 짓을하거나 개념을 놓치고, 제발 저를 따라 불꽃을 자유롭게. ;-)

모델

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) 

보기

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 

가 완료하려면, 여기에 내가 그 테이블 및 편집 페이지를 렌더링 사용하고 양식 서식 코드입니다. 템플릿

<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> 

답변

1

봅니다 중간 모델 OctetAssignment 및 AliasAssignment를 제거합니다. 사용자 정의 필드를 추가하려는 경우에만 사용해야합니다. 그렇지 않으면 장고가 생성하여 투명하게 사용합니다.

+0

주사위가 없어서 작동하지 않았습니다. 실제로 GET 뷰에서 내 데이터 테이블을 손상 시켰습니다. – nnachefski

+0

오 기다려! 그게 작동 했어, 난 그냥 내 DB를 시드 스크립트와 관계를 추가 "wasnt". 도움을 많이 주셔서 감사합니다! – nnachefski

관련 문제