#python #django
Вопрос:
У меня есть три модели:
Class Collection(models.Model):
var_1 = .....
var_2 = ....
Class Titles(models.Model):
var_a = models.ForeignKey(Collection,
related_name="has_titles", on_delete=models.CASCADE)
var_b = ...
Class OtherObject(models.Model):
var_x = models.ForeignKey(Collection,
related_name="has_other_object", on_delete=models.CASCADE)
var_y = ...
В views.py Я использую CBV DetailView с формой в нем (используя затем FormMixin или MultipleFormsMixin, но это не имеет значения).
Таким образом, в основном каждое название связано с Коллекцией с помощью внешнего ключа, и каждый другой объект также связан с Коллекцией с помощью внешнего ключа.
Таким образом, когда пользователь находится на странице сведений о модели заголовка, у него есть возможность заполнить форму для добавления другого объекта, который затем будет отображаться в представлении сведений о коллекции, связанном с заголовком.
Другими словами, то, что я хочу, — это var_x = var_a текущего заголовка :
if form.is_valid():
new_other_object = form.save(commit=False)
new_other_object.var_x = HERE I WANT TO GET var_a OF CURRENT OBJECT
new_other_object.save()
Итак, поскольку в заголовке есть внешний ключ, содержащий идентификатор коллекции, к которой он принадлежит, я попытался использовать такие вещи, как self.get_object(). Я читал такие вещи, как использование self.get_object().var_a может работать, но со всеми различными решениями, которые я пробовал, я получал ошибки, в основном ошибку, в которой упоминается, что объект должен быть экземпляром коллекции.
Как бы вы этого добились?
Спасибо.
Комментарии:
1. Какую именно модель вы
DetailView
используете, можете ли вы предоставить дополнительную информацию о представлении (возможно, обо всем представлении, если оно не такое длинное).2. Спасибо за ваш комментарий. В моем детальном представлении используется модель заголовка. Есть еще кое-что views.py но я думаю, что это на самом деле не мешает этой проблеме. Я попробовал new_other_object.var_x = self.get_object().var_a, например, но это не работает.
3. Ты спасаешь только
new_fact
то , а не тоnew_other
.4. Извините, это просто ошибка при написании. Я редактирую
5. Эй, братан, пожалуйста, отредактируй свой пост и включи свой класс DetailView , с которым тебе нужна помощь, а также форму ,
forms.py
которую ты оцениваешь. Без них на данный момент мы не сможем эффективно помочь.
Ответ №1:
Вам просто нужно сделать запрос: new_other_object.var_x = Title.objects.get(pk=форма[‘id’]) Таким образом, вы получаете объект, который должен быть заранее выбранным ключом, затем вставляете его в поле внешний ключ, а затем сохраняете, он должен работать