Как заполнить форму из представления Django?

#django-models #django-views #django-forms #django-templates

Вопрос:

Добрый вечер, Сообщество,

Я создаю свой первый веб-сайт и сталкиваюсь со следующей проблемой. У меня есть форма, в которой есть разные поля, которые должен заполнить пользователь. Одно из этих полей-это поле пользователя, которое я не хочу, чтобы пользователь заполнял. Следовательно, я хотел бы завершить с бэкенда через представления. Я пробовал разные вещи, но я не в состоянии это сделать, какие-либо подсказки или предложения?

Ниже приведен мой код:

Models.py:

 class CompanyForm(ModelForm):
class Meta:
    model = Company
    fields = ('company_name', 'outstanding_shares', 'share_price', 'revenue', 'expenses', 'total_assets','total_liabilities', 'current_assets','current_liabilities', 'operating_cashflows', 'capex')
    widgets = {
        'company_name': forms.TextInput(attrs={'class': 'form-control', 'placeholder' : 'Company name'}),
        'outstanding_shares': forms.NumberInput(attrs={'class': 'form-control', 'placeholder' : 'Shares outstanding'}),
        'share_price':forms.NumberInput(attrs={'class': 'form-control', 'placeholder' : 'Share price'}),
        'revenue':forms.NumberInput(attrs={'class': 'form-control', 'placeholder' : 'Revenue'}),
        'expenses':forms.NumberInput(attrs={'class': 'form-control', 'placeholder' : 'Expenses'}),
        'total_assets':forms.NumberInput(attrs={'class': 'form-control', 'placeholder' : 'Total Assets'}),
        'total_liabilities':forms.NumberInput(attrs={'class': 'form-control', 'placeholder' : 'Total Liabilities'}),
        'current_assets' :forms.NumberInput(attrs={'class': 'form-control', 'placeholder' : 'Current Assets'}),
        'current_liabilities':forms.NumberInput(attrs={'class': 'form-control', 'placeholder' : 'Current Liabilities'}),
        'operating_cashflows':forms.NumberInput(attrs={'class': 'form-control', 'placeholder' : 'Operating Cashflows'}),
        'capex':forms.NumberInput(attrs={'class': 'form-control', 'placeholder' : 'Capital Expenditure'}),            
    }
 

Views.py:

 def create_comp(request):      
form = CompanyForm()
if request.method == 'POST':
    print(request.POST)
    form = CompanyForm(request.POST)
    user = request.user      
    if form.is_valid(): 
        User = user                                  
        form.save()
        return HttpResponseRedirect('http://127.0.0.1:8000/companies_list/') 
 

Когда я создаю модель и проверяю ее в базе данных, пользователь не назначается.

Согласно изображению нижевведите описание изображения здесь

Ответ №1:

у вас есть другой способ сделать это

1 — например, вы можете перезаписать метод сохранения

измените код следующим образом:

views.py

 def create_comp(request):      
    form = CompanyForm()
    if request.method == 'POST':
        print(request.POST)
        form = CompanyForm(request.POST)
        user = request.user      
        if form.is_valid(): 
            form.save(user=user)
            return HttpResponseRedirect('http://127.0.0.1:8000/companies_list/')
 

forms.py

  class CompanyForm(ModelForm):
      class Meta:
         model = Company
         fields = ('company_name', 'outstanding_shares', 'share_price', 'revenue', 'expenses', 'total_assets','total_liabilities', 'current_assets','current_liabilities', 'operating_cashflows', 'capex')
         widgets = {
        'company_name': forms.TextInput(attrs={'class': 'form-control', 'placeholder' : 'Company name'}),
        'outstanding_shares': forms.NumberInput(attrs={'class': 'form-control', 'placeholder' : 'Shares outstanding'}),
        'share_price':forms.NumberInput(attrs={'class': 'form-control', 'placeholder' : 'Share price'}),
        'revenue':forms.NumberInput(attrs={'class': 'form-control', 'placeholder' : 'Revenue'}),
        'expenses':forms.NumberInput(attrs={'class': 'form-control', 'placeholder' : 'Expenses'}),
        'total_assets':forms.NumberInput(attrs={'class': 'form-control', 'placeholder' : 'Total Assets'}),
        'total_liabilities':forms.NumberInput(attrs={'class': 'form-control', 'placeholder' : 'Total Liabilities'}),
        'current_assets' :forms.NumberInput(attrs={'class': 'form-control', 'placeholder' : 'Current Assets'}),
        'current_liabilities':forms.NumberInput(attrs={'class': 'form-control', 'placeholder' : 'Current Liabilities'}),
        'operating_cashflows':forms.NumberInput(attrs={'class': 'form-control', 'placeholder' : 'Operating Cashflows'}),
        'capex':forms.NumberInput(attrs={'class': 'form-control', 'placeholder' : 'Capital Expenditure'}),            
         }
      def save(self, **kwargs):
          user = kwargs.pop("user", None)
          instance = super(CompanyForm, self).save(**kwargs)
          instance.user = user
          instance.save()
          return instance
 

2 — вы можете обновить компанию и добавить пользователя после сохранения формы

views.py

 def create_comp(request):      
    form = CompanyForm()
    if request.method == 'POST':
        print(request.POST)
        form = CompanyForm(request.POST)
        user = request.user      
        if form.is_valid(): 
            instance = form.save(commit=False)
            instance.user = user
            instance.save()
            return HttpResponseRedirect('http://127.0.0.1:8000/companies_list/')