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