我不明白爲什麼會發生這種情況。我已將完全相同的代碼應用於其他內嵌窗體集,但此特定內聯窗體集未保存我的任何更改。我發現在我的表單「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)
「assert False」是我放入以瞭解何時if語句評估爲true的內容。這絕不會發生。我的調試結果表明,clean_data總是空的。 用戶名是我正在工作的其他東西,因爲這個其他問題而沒有時間去調試。我將刪除它,以免它人混淆。 – 2011-03-15 12:42:49