[英]Django - Modify query based on user logged in
我有一個包含兩個表的數據庫:“安裝”和“安裝程序”。 “安裝”表具有用於安裝程序的字段。 我希望安裝程序能夠登錄並僅查看其安裝列表。
目前,我正在使用SQLite,但將使用MySQL進行生產。
我該怎么做呢?
謝謝!
models.py:
from django.db import models
from django.core.urlresolvers import reverse
class Install(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=45)
address = models.CharField(max_length=60)
city = models.CharField(max_length=45)
state = models.CharField(max_length=15)
zipcode = models.IntegerField()
email = models.EmailField(max_length=60, blank = True, null = True)
phone= models.IntegerField(blank = True, null = True)
website = models.URLField(max_length=90, blank = True, null = True)
unit_model = models.CharField(max_length=30)
serial = models.CharField(max_length=30)
unit_installer = models.CharField(max_length=30)
unit_dealer = models.CharField(max_length=30)
unit_distributor = models.CharField(max_length=30)
install_date = models.DateField()
def __str__(self): # unicode in python 2
return self.name
def get_absolute_url(self):
return reverse('installs:install_edit', kwargs={'pk': self.pk})
class Installer(models.Model):
id = models.AutoField(primary_key=True)
installer_id = models.CharField(max_length=20)
name = models.CharField(max_length=40)
company = models.CharField(max_length=40)
address = models.CharField(max_length=60)
city = models.CharField(max_length=40)
state = models.CharField(max_length=15)
zipcode = models.IntegerField()
email = models.EmailField(max_length=60, blank = True, null = True)
phone= models.IntegerField(blank = True, null = True)
website = models.URLField(max_length=90, blank = True, null = True)
trained_by = models.CharField(max_length=20)
def __str__(self): # unicode in python 2
return self.name # what should this be???
def get_absolute_url(self):
return reverse('installers:installer_edit', kwargs={'pk': self.pk})
和views.py(安裝程序尚未完成):
from django.shortcuts import render,redirect, get_object_or_404
from django.forms import ModelForm, forms
#from django.contrib.admin.widgets import AdminDateWidget
from bdb.models import Install, models
class InstallForm(ModelForm):
class Meta:
model = Install
fields = ['name', 'address', 'city', 'state', 'zipcode', 'email', 'phone', 'unit_model', 'unit_discharge',
'gpd', 'ptgals', 'rgals', 'serial', 'unit_installer', 'unit_dealer', 'unit_distributor', 'install_date']
class InstallerForm(ModelForm):
class Meta:
model = Installer
fields =['name', 'address', 'city', 'state', 'zipcode', 'email', 'phone', 'website', 'installerID', 'trainedBy']
def install_list(request, template_name='installs/installs_list.html'):
install = Install.objects.all()
data = {}
data['object_list'] = install
return render(request, template_name, data)
def install_create(request, template_name='installs/installs_form.html'):
form = InstallForm(request.POST or None)
if form.is_valid():
form.save()
return redirect('installs:install_list')
return render(request, template_name, {'form':form})
def install_update(request, pk, template_name='installs/installs_form.html'):
cust = get_object_or_404(Install, pk=pk)
form = InstallForm(request.POST or None, instance=cust)
if form.is_valid():
form.save()
return redirect('installs:installs_list')
return render(request, template_name, {'form':form})
def install_delete(request, pk, template_name='installs/installs_confirm_delete.html'):
cust = get_object_or_404(Install, pk=pk)
if request.method=='POST':
cust.delete()
return redirect('installs:installs_list')
return render(request, template_name, {'object':cust})
編輯:添加了models.py和views.py
假設您的Installer
模型是User
模型的某種類似於個人檔案的模型,是否正確?
如果是這樣,並且一旦有了Install
和Installer
之間的關系,那么事情就容易多了,例如,您定義了如下關系:
class Install(models.Model):
installer = models.ForeignKey('Installer', related_name='installs')
正如您可以簡單地在您的視圖中做的那樣:
def install_list(request, template_name='installs/installs_list.html'):
installs = request.user.installer.installs.all()
data = {}
data['object_list'] = install
return render(request, template_name, data)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.