2011-03-13 44 views
2

我不明白爲什麼會發生這種情況。我已將完全相同的代碼應用於其他內嵌窗體集,但此特定內聯窗體集未保存我的任何更改。我發現在我的表單「AtLeastOneFull」中form.cleaned_data總是空的,儘管我有數據。空的清空數據

網頁正確顯示模型'Access'的內容,但是一旦我點擊提交,它會註冊爲無效,因爲無論我對網頁上的內嵌表單數據所做的更改,我都沒有數據。

形式:

class AtLeastOneFull(forms.models.BaseInlineFormSet): 
    def clean(self): 
     count = 0 
     for form in self.forms: 
      try: 
       if form.cleaned_data and not form.cleaned_data.get('access_rights', ACCESS_CHOICES[0][0]): 
        count += 1 
        assert False 
      except AttributeError: 
       pass 
     if count < 1: 
      raise forms.ValidationError('You must have at least one full access user') 

class UserAccessForm(forms.ModelForm): 
    class Meta: 
     model = Access 
    def clean(self): 
     cleaned_data = self.cleaned_data 
     # Check 1: Must have valid user. 
     # To Be Developed 
     return cleaned_data 

型號:

class Portfolio (models.Model): 
    nickname = models.CharField(max_length=20, unique=True) 
    name = models.CharField(max_length=50, unique=True) 
    address1 = models.CharField(max_length=75, null=True, blank=True) #Street address, P.O. box, company name, c/o 
    address2 = models.CharField(max_length=75, null=True, blank=True) #Apartment, suite, unit, building, floor, etc. 
    city = models.CharField(max_length=30, null=True, blank=True) 
    state = models.CharField(max_length=2, null=True, blank=True) 
    zip = models.CharField(max_length=10, null=True, blank=True) 

    def __unicode__(self): 
     return u'%s' % (self.nickname) 

    class Meta: 
     ordering = ['name'] 

# Property Expansion 
class Access (models.Model): 
    portfolio_id = models.ForeignKey(Portfolio) 
    user_id = models.ForeignKey(User) 
    title = models.CharField(max_length=30, null=True, blank=True) 
    access_rights = models.PositiveIntegerField(choices=ACCESS_CHOICES) 

    def __unicode__(self): 
     return u'%s: %s' % (self.portfolio_id, self.user_id) 

    class Meta: 
     ordering = ['portfolio_id', 'user_id'] 
     unique_together = ("portfolio_id", "user_id") 

觀點:

cPortfolio = Portfolio.objects.get(nickname=pNickname) 
AccessFormSet = inlineformset_factory(Portfolio, 
             Access, 
             form=UserAccessForm, 
             formset=AtLeastOneFull, 
             extra=1, 
             can_delete=False) 
if request.method == 'POST': 
    if 'access_apply' in request.POST: 
     cAccessFormSet = AccessFormSet(request.POST, request.FILES, instance=cPortfolio) 
     if cAccessFormSet.is_valid(): 
      testResults = cAccessFormSet.save(commit=False) 
      for form in testResults: 
       form.save() 
cAccessFormSet = AccessFormSet(instance=cPortfolio) 

回答

0

當然,它並不像removi那樣簡單中的assert False聲明?

此外,爲什麼UserAccessForm.clean查詢User s由"Username",當模型字段實際上是user_id

+0

「assert False」是我放入以瞭解何時if語句評估爲true的內容。這絕不會發生。我的調試結果表明,clean_data總是空的。 用戶名是我正在工作的其他東西,因爲這個其他問題而沒有時間去調試。我將刪除它,以免它人混淆。 – 2011-03-15 12:42:49

0

問題是表單的乾淨功能。爲了縮短這個問題的代碼,插入了#要開發的代碼,但真正的代碼存在阻止數據返回的問題。

class UserAccessForm(forms.ModelForm): 
    class Meta: 
     model = Access 
    def clean(self): 
     cleaned_data = self.cleaned_data 
     # Check 1: Must have valid user. 
     # To Be Developed 
     return cleaned_data