Django получает доступ к внешнему ключу текущего объекта в views.py

#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’]) Таким образом, вы получаете объект, который должен быть заранее выбранным ключом, затем вставляете его в поле внешний ключ, а затем сохраняете, он должен работать