Установите поле пользователя модели для текущего зарегистрированного пользователя перед сохранением его django ModelForm - PullRequest
0 голосов
/ 13 декабря 2010

у меня есть форма модели, как показано ниже

class JobForm(ModelForm):
    class Meta:
        model = Job
        exclude = ('date_added', 'date_modified','owner','status','tags','slug','winning_tech','completiondate')

Поле владельца - это ключ ForeignKey, связанный с моделью пользователя Django, и он исключен из отображения в форме.Я пытаюсь установить в поле владельца текущего вошедшего в систему пользователя перед сохранением формы.Моя функция сохранения содержится в следующем коде.


def createJob(request):
  bix_user=getBixUser(request.user)
  if request.method == 'POST':
      form = JobForm(request.POST)
      form.fields['owner']=bix_user
      if form.is_valid():
         form.save()

      return HttpResponseRedirect('/home')
 else:
        ....

Я очень уверен, что поступаю неправильно.Я некоторое время не общался с моей стороной Джанго, поэтому буду признателен за любую помощь.

Ответы [ 3 ]

2 голосов
/ 13 декабря 2010

Я всегда перезаписываю метод save() и добавляю в него пользователя.

Примерно так:

class JobForm(ModelForm):
    def save(self, user, commit=True):
        job = ModelForm.save(commit=False)
        job.owner = user
        if commit:
            job.save()
        return job
0 голосов
/ 13 декабря 2010

Я использую вариант WoLph выше:

def save(self, *args, **kwargs):
    # add defaut owner field if not already stated

    if 'owner' not in self.__dict__:
        self.creator = system_user()

    super(MyModel, self).save(*args, **kwargs)
0 голосов
/ 13 декабря 2010

Поэтому ответьте на мой собственный вопрос, используйте commit = false и измените любые значения, которые вы хотите. Этот раздел кода опирается на идеи из двух предыдущих ответов (wolPh и пользователь ***)


def save(self,user, commit=True, *args, **kwargs):</p>

    job = super(JobForm, self).save(commit=False,*args, **kwargs)
    job.owner = user
    if commit:
        job.save()
    return job

...