#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/')