2011-09-13 42 views
0

編輯M2M我有2種型號:如何在Django通過的ModelForm

class Case(models.Model): 
Priority = ( 
        ('Blocker', 'Blocker'), 
        ('High', 'High'), 
        ('Medium', 'Medium'), 
        ('Low', 'Low'), 
      ) 
id   = models.AutoField(primary_key=True) 
name  = models.CharField(max_length=200) 
image  = models.URLField(blank=True) 
requirements = models.URLField(blank=True) 
priority = models.CharField(max_length=10, choices=Priority) 
description = models.CharField(max_length=200) 
step  = models.TextField() 
modified = models.DateTimeField(editable=False) 
user  = models.ForeignKey(User, editable=False) 

def save(self, *args, **kwargs): 
    ''' On save, update timestamps ''' 
    if not self.id: 
     self.modified = datetime.datetime.today() 
    super(Case, self).save(*args, **kwargs) 

def __unicode__(self): 
    return self.name 
    return self.description 

class Suite (models.Model): 
    id   = models.AutoField(primary_key=True) 
    name  = models.CharField(max_length=200) 
    features = models.TextField() 
    modified = models.DateTimeField(editable=False, null=True) 
    cases  = models.ManyToManyField(Case, null=True) 
    user  = models.ForeignKey(User, editable=False) 

    def save(self, *args, **kwargs): 
     ''' On save, update timestamps ''' 
     if not self.id: 
      self.modified = datetime.datetime.today() 
     super(Suite, self).save(*args, **kwargs) 

    def __unicode__(self): 
     return self.name 
     return self.description 

當我想創建套件或情況下正常工作:

def addCase(request): 
    c = {} 
    c.update(csrf(request)) 
    user = auth.get_user(request) 
    if request.method == 'POST': 
     form = AddCase(data = request.POST) 
     if form.is_valid(): 
      form.save() 
    else: 
     form = AddCase() 

    return render_to_response('1.html', { 
                'form': form, 
                'js': c.items(), 
                'host' : request.get_host(), 
                'user' : user 
               }) 
def addSuite(request): 
    c = {} 
    c.update(csrf(request)) 
    user = auth.get_user(request) 
    if request.method == 'POST': # If the form has been submitted... 
     form = AddSuite(data = request.POST) 
     if form.is_valid(): 
      form.save() 
    else: 
     form = AddSuite() 

    return render_to_response('2.html', { 
                'form': form, 
                'js': c.items(), 
                'host' : request.get_host(), 
                'user' : user 
               }) 

但是,當我想編輯這些,我使用下一個意見:

def editSuite (request, suite_id): 
    suite = Suite.objects.get(id=suite_id) 
    name = suite.name 
    features = suite.features 
    cases = suite.cases 
    c = {} 
    c.update(csrf(request)) 
    if request.method == 'POST': # If the form has been submitted... 
     form = EditSuite(data = request.POST) 
     if form.is_valid(): 
      suite = Suite(
         id  = suite_id, 
         name  = form.cleaned_data['name'], 
         features = form.cleaned_data['features'], 
         cases  = request.POST.getlist('cases') 
         ) 
      suite.save() 
#   form.save() 
    else: 
     form = EditSuite(instance = suite) 



    return render_to_response('editsuite.html', { 
     'form': form, 
     'suite': suite, 
     'cases' : request.POST.getlist('cases') 
    }) 

所以,我需要知道如何保存編輯過的套件。添加工作正常,在管理面板工作正常,但是當我試圖編輯套件時,我收到了很多不同的錯誤。關鍵時刻 - 在管理中運作良好。 謝謝

回答

0

好吧,那裏是我的壞。要編輯m2m模型表格,你應該使用類似這樣的東西

form = EditSuite(request.POST, instance = suite) 
    if form.is_valid(): 
     obj = form.save(commit=False) 
     obj.user = request.user 
     cases = request.POST.getlist('cases') 
     obj.save() 
     form.save_m2m()