Мне просто нужно было решить эту проблему, и я не хотел обманывать. Это было не сложно. Проверьте ниже.
Пожалуйста, обратите внимание, что это только запутанно, потому что я решил придерживаться своего взгляда на разделение MVC по этому вопросу. Население пользователя зависит от вида (так как у нас нет специального начального пользователя в Edit). Обработка зависит от модели.
Нетрудно извлечь миксин формы, который ожидает новый параметр "passthrough" и автоматически объединяет исключение с пересылкой исходных данных. Это также добавляет безопасность знания того, что никто не может изменять данные этих полей в представлении.
class TestForm(forms.ModelForm):
class Meta:
exclude = ('user')
model = models.Test
def save(self, commit=True):
obj = super(CharmForm, self).save(commit=False)
obj.user = self.initial['user']
if commit:
obj.save()
class TestView(CreateView):
model = models.Test
form_class = TestForm
def get_initial(self,**kwargs):
initial = super(CreateView,self).get_initial()
c = RequestContext(self.request)
initial = initial.copy()
initial['user'] = c['user']
return initial
Кроме того, не совсем уверен, пытались ли вы использовать новые представления на основе классов. На самом деле я отвечаю на этот вопрос для всех, у кого есть эта проблема (мне пришлось взломать код, чтобы найти ответ, потому что никто другой, похоже, не сделал этого).