Вот как выглядят мои модели:
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')
Все, что я действительно хотел сделать, это добавить временную метку, когда было создано заданное отношение manytomany. Это имеет смысл, но это также добавляет немного сложности. Помимо удаления функциональности .add() [несмотря на то, что единственное поле, которое я действительно добавляю, автоматически создается, поэтому технически это не должно мешать этому]. Но я могу жить с этим, так как я не возражаю против добавления дополнительного QuestionTagM2M.objects.create(question=,tag=)
, если это означает получение дополнительной функциональности временной метки. Моя проблема заключается в том, что мне очень хотелось бы сохранить мой виджет javascript filter_horizontal
в админе. Я знаю, что документы говорят, что я могу использовать встроенную строку вместо этого, но это слишком громоздко, потому что в любом случае нет дополнительных полей, которые действительно были бы во встроенном ключе, кроме внешнего ключа, в Tag
. Кроме того, в более крупной схеме моей схемы базы данных мои объекты Question
уже отображаются как встроенные на моей странице администратора, а поскольку Django не поддерживает вложенные строки в admin [пока], у меня нет способа выбрать теги для данного вопроса. Есть ли способ переопределить formfield_for_manytomany(self, db_field, request=None, **kwargs)
или что-то подобное, чтобы разрешить использование виджета filter_horizontal
и автоматического создания столбца date_added
в базе данных? Это похоже на то, что django должен иметь возможность делать изначально, если вы укажете, что все столбцы промежуточного элемента автоматически создаются (кроме внешних), возможно, с помощью auto_created=True
? или что-то похожее