Сохранить обратный внешний ключ в Django CreateView - PullRequest
0 голосов
/ 25 января 2020

У меня есть 2 модели:

class Company(models.Model):
    ...
    contact_person = models.ForeignKey(
        settings.AUTH_USER_MODEL, on_delete=models.CASCADE, verbose_name=_("Contact person"))
    ...
class Assignment(models.Model):
    ...
    company = models.ForeignKey('company.Company', null=True, blank=True,
                                on_delete=models.CASCADE, verbose_name=_("Company"))
    ...

Я хочу автоматически заполнить поле company при использовании Django CreateView в зависимости от текущего пользователя, вошедшего в систему. Потому что каждая модель Company имеет отношение ForeignKey с User. Поэтому я переопределяю метод form_valid, но как я могу получить правильное значение здесь для поля компании?

class AssignmentCreateView(generic.edit.CreateView):

    def form_valid(self, form):
        instance = form.save(commit=False)
        instance.company = self.request.user
        super(AssignmentCreateView, self).save(form)

1 Ответ

1 голос
/ 25 января 2020
def form_valid(self, form):
    company = Company.objects.get(user=self.request.user)
    form.instance.company = company
    valid_data = super(AssignmentCreateView, self).form_valid(form)
    return valid_data
...