django admin wiele-do-wielu modeli pośrednich przy użyciu through = i filter_horizontal
Tak wyglądają moje modele:
<code>class QuestionTagM2M(models.Model): tag = models.ForeignKey('Tag') question = models.ForeignKey('Question') date_added = models.DateTimeField(auto_now_add=True) class Tag(models.Model): description = models.CharField(max_length=100, unique=True) class Question(models.Model): tags = models.ManyToManyField(Tag, through=QuestionTagM2M, related_name='questions') </code>
Wszystko, co naprawdę chciałem zrobić, to dodać znacznik czasu, gdy dana relacja manytomany została utworzona. To ma sens, ale dodaje też trochę złożoności. Poza usunięciem funkcji .add () [pomimo tego, że jedyne pole, które naprawdę dodam, jest automatycznie tworzone, więc technicznie nie powinno to już więcej przeszkadzać]. Ale mogę z tym żyć, bo nie mam nic przeciwko robieniu tego dodatkowegoQuestionTagM2M.objects.create(question=,tag=)
zamiast tego, jeśli oznacza to uzyskanie dodatkowej funkcjonalności znacznika czasu. Moim problemem jest to, że naprawdę chciałbym móc zachować swojefilter_horizontal
widżet javascript w admin. Wiem, że doktorzy mówią, że mogę zamiast tego użyć inline, ale jest to po prostu zbyt niewygodne, ponieważ nie ma żadnych dodatkowych pól, które w rzeczywistości byłyby w linii inline poza kluczem obcymTag
tak czy inaczej. Również w większym schemacie mojego schematu bazy danych mójQuestion
obiekty są już wyświetlane jako inline na mojej stronie administracyjnej, a ponieważ Django nie obsługuje zagnieżdżonych linii w admin [jeszcze], nie mam możliwości wyboru tagów dla danego pytania. Czy jest jakiś sposób na zastąpienieformfield_for_manytomany(self, db_field, request=None, **kwargs)
lub coś podobnego, aby umożliwić moje użycie fajnegofilter_horizontal
widget i automatyczne tworzeniedate_added
kolumna do bazy danych? Wydaje się, że coś, co django powinno być w stanie wykonać natywnie, o ile określisz, że wszystkie kolumny w półprodukcie są tworzone automatycznie (inne niż klucze obce), być może zauto_created=True
? lub coś w tym stylu