Mam projekt Django, z 2 modelami, Structure
i Bracket
, Bracket ma ForeignKey do struktury (tj. Jeden-do-wielu, jedna Struktura ma wiele nawiasów). Stworzyłem dla strony administratora TabularInline
, aby na Strukturze znajdowała się tabela nawiasów. I dodaje niestandardowe formset z jakimś niestandardowym clean
metodą zrobić kilka dodatkowych walidacji, nie można mieć wsporniku, który jest niezgodny z innego wspornika na tej samej strukturze itpTestowanie metod InlineFormset clean
Administrator wygląda następująco:
class BracketInline(admin.TabularInline):
model = Bracket
formset = BracketInlineFormset
class StructureAdmin(admin.ModelAdmin):
inlines = [
BracketInline
]
admin.site.register(Structure, StructureAdmin)
BracketInlineFormset
właśnie ma czyste metody:
To wszystko działa, a prace walidacji.
Jednak teraz chcę napisać kilka unittest, aby przetestować moją złożoną logikę walidacji formset.
Moja pierwsza próba do sprawdzania znane, dobre wartości to:
data = {'form-TOTAL_FORMS': '1', 'form-INITIAL_FORMS': '0', 'form-MAX_NUM_FORMS': '', 'form-0-field1':'good-value', … }
formset = BracketInlineFormset(data)
self.assertTrue(formset.is_valid())
jednak, że nie działa i pojawia się wyjątek:
======================================================================
ERROR: testValid (appname.tests.StructureTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/paht/to/project/tests.py", line 494, in testValid
formset = BracketInlineFormset(data)
File "/path/to/django/forms/models.py", line 672, in __init__
self.instance = self.fk.rel.to()
AttributeError: 'BracketInlineFormset' object has no attribute 'fk'
----------------------------------------------------------------------
Django documentation (dla formset walidacji) implikuje można Zrób to.
Dlaczego to nie działa? Jak przetestować niestandardowy clean()/sprawdzanie poprawności dla mojego wbudowanego zestawu formularzy?
Co deklaracja BracketInlineFormset wyglądać? –
@JohnMee wbudowany kod zestawu formularzy dodany do pytania – Rory