【发布时间】:2022-01-12 23:26:10
【问题描述】:
我已将项目部署到 Heroku。我正在为我的数据库使用 postgresql。
使用 acct_no 作为外键将作业附加到客户表。我可以使用 postgresql 创建客户,但无法创建工作。
我可以使用 sqlite 创建作业,但是当我尝试使用 postgresql 数据库时,createview 不会创建作业并将我重定向到我的主页。我对 django 还很陌生,我曾尝试在此处寻找类似的问题,但未能找到解决方案。
models.py
class Jobs(models.Model):
id = models.IntegerField(db_column='ID', primary_key=True) # Field name made lowercase.
acct_no = models.ForeignKey(Customers, on_delete=models.CASCADE, default=1000000, db_column='ACCT_NO') # Field name made lowercase.
foreman = models.CharField(db_column='FOREMAN', max_length=45, blank=True, null=True)
comments = models.CharField(db_column='COMMENTS', max_length=255, blank=True, null=True) # Field name made lowercase.
views.py
class JobCreateView(CreateView):
model = Jobs
template_name = 'new_job.html'
form_class = JobForm
def get_initial(self):
initial = super(JobCreateView, self).get_initial()
initial['acct_no'] = Customers.objects.get(pk = self.kwargs['pk'])
return initial
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
customer = Customers.objects.get(pk = self.kwargs['pk'])
context["customer"] = customer
return context
def get_success_url(self):
return reverse_lazy('CustomerView', kwargs = {'pk':self.kwargs['pk']})
forms.py
class JobForm(forms.ModelForm):
class Meta:
model = Jobs
fields = ['acct_no', 'job_type', 'estimatedate', 'estimatetime', 'vacant', 'year_built', 'comments']
labels = {
'job_type' : 'Job Type* ',
'estimatedate' : 'Estimate Date',
'estimatetime' : 'Estimate Time'
}
widgets = {
'acct_no' : forms.HiddenInput(attrs={'class' : 'form-control form-select' }), # foreign key
'job_type' : forms.Select(choices = JOBS, attrs={'class' : 'form-control form-select' }),
'estimatedate' : widgets.DateInput(attrs={'type' : 'date', 'class' : 'form-control'}),
'estimatetime' : widgets.TimeInput(attrs={'type' : 'time', 'class' : 'form-control'}),
'vacant' : forms.Select(choices = CHOICES,attrs={'class' : 'form-control form-select' }),
'year_built' : forms.Select(choices = YEAR_LIST, attrs={'class' : 'form-control form-select' }),
'comments' : forms.Textarea(attrs={'class' : 'form-control'})
}
urls.py
path('new_job/<pk>', my_login_required(JobCreateView.as_view()), name = 'new_job'),
**编辑
settings.py
import os
from pathlib import Path
import django_js_reverse
BASE_DIR = Path(__file__).resolve().parent.parent
SECRET_KEY = '***'
DEBUG = False
ALLOWED_HOSTS = ['***', 'localhost']
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'core',
'customers',
'jobs',
'django_js_reverse',
'simplejson',
'rest_framework'
]
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'whitenoise.middleware.WhiteNoiseMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django_session_timeout.middleware.SessionTimeoutMiddleware'
]
ROOT_URLCONF = '***'
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [BASE_DIR / 'templates'],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
WSGI_APPLICATION = '***'
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': '***',
'USER': '***',
'PASSWORD': '***',
'HOST': '***',
'PORT': '***',
}
}
AUTH_PASSWORD_VALIDATORS = [
{
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
},
]
这是我在这里提出的第一个问题,所以如果我没有提供足够的信息,请告诉我,我会添加任何需要的内容。感谢您的任何帮助或想法!
【问题讨论】:
-
将您的 settings.py 添加到您的问题中。
-
好的,谢谢,添加了 settings.py
标签: python django postgresql sqlite django-class-based-views