Ich habe ein Django-Projekt, mit 2 Modellen, Structure
und Bracket
, die Bracket hat einen ForeignKey zu einer Struktur (d. H. Eins-zu-viele, eine Struktur hat viele Brackets). Ich habe eine TabularInline
für die Admin-Site erstellt, so dass es eine Tabelle von Klammern auf der Struktur geben würde. Ich habe eine benutzerdefinierte mit einigen einer benutzerdefinierten clean
Methode Formset einige zusätzliche Validierung zu tun, können Sie nicht eine Halterung, die auf der gleichen Struktur mit einem anderen Bracket Konflikte usw.Testing InlineFormset saubere Methoden
Der Admin wie folgt aussieht:
class BracketInline(admin.TabularInline):
model = Bracket
formset = BracketInlineFormset
class StructureAdmin(admin.ModelAdmin):
inlines = [
BracketInline
]
admin.site.register(Structure, StructureAdmin)
die BracketInlineFormset
hat gerade die saubere Methode:
Das alles funktioniert, und die Validierungsarbeiten.
Nun möchte ich jedoch einen Unittest schreiben, um meine komplexe Formset-Validierungslogik zu testen.
Mein erster Versuch bekannt-gute Werte zu validieren ist:
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())
jedoch, das nicht funktioniert und löst die Ausnahme:
======================================================================
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'
----------------------------------------------------------------------
Die Django documentation (für formset Validierung) impliziert, man kann mach das.
Wie funktioniert das nicht? Wie teste ich die benutzerdefinierte clean()/Validierung für mein Inline-Formularsatz?
Was ist die Erklärung von BracketInlineFormset aussehen? –
@JohnMee Inline-Formularsatzcode zur Frage hinzugefügt – Rory