#django
#django
Вопрос:
У меня есть модель Django, которая имеет много параметров, среди которых есть один, называемый ‘system’, который является ссылкой на объект типа ‘System’.
class Format(models.Model):
system = models.ForeignKey(System, on_delete=models.SET_NULL, null=True)
petition_date = models.DateField(auto_now=True)
resolution_date = models.DateField(null=True, default=None)
... other fields ...
Система может иметь значение null, но я бы хотел, чтобы это поле было таким же, как у пользователя, который создает объект Format.
Мой пользовательский объект выглядит следующим образом:
class CustomUser(AbstractUser):
current_system = models.ForeignKey(System, on_delete=models.SET_NULL, null=True, default=None)
department = models.ForeignKey(Department, on_delete=models.SET_NULL, null=True, default=None)
У меня есть форма, которая успешно создает объекты формата. Тем не менее, я хотел бы знать способ сделать что-то подобное в моем CreateView:
class FormatCreateView(LoginRequiredMixin, CreateView):
"""
-----------------------Vista de crear nuevos articulos--------------------------
"""
template_name = 'format_form.html'
model = Format
success_url = reverse_lazy("formats:formats")
form_class = FormatUpdateForm
def post(self, request, *args, **kwargs):
form = FormatUpdateForm(request.POST)
if form.is_valid():
user = User.objects.get(id=self.request.user.id)
format = self.object # I'm pretty sure this is wrong and doesn't get the Format object that was just created
format.system = user.current_system
format.save(update_fields=['system'])
return HttpResponseRedirect(reverse('formats:formats'))
Это, однако, не работает. Любые предложения будут оценены.
Обновить:
Кроме того, я забыл упомянуть, что при этом объект Format больше не создается после заполнения и отправки формы.
Комментарии:
1. Попробуйте с
format = form.instance
2. Я забыл упомянуть, что объект Format также не создается, когда я переопределяю метод post подобным образом, но я не знаю, как при таком переопределении он больше не создает объект.
3. Вы можете использовать
new_obj = form.save(commit=False)
, затем изменить новый объект и сохранить его с помощьюnew_obj.save()