简体   繁体   English

Django-根据登录的用户修改查询

[英]Django - Modify query based on user logged in

I have a database that has two tables: 'installs' and 'installers'. 我有一个包含两个表的数据库:“安装”和“安装程序”。 The 'install' table has a field for the installer. “安装”表具有用于安装程序的字段。 I would like the installer to be able to log in and see a list of only their installs. 我希望安装程序能够登录并仅查看其安装列表。

For now, I am working with SQLite but will use MySQL for production. 目前,我正在使用SQLite,但将使用MySQL进行生产。

How do I do this? 我该怎么做呢?

Thanks! 谢谢!

models.py: 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})

And views.py (installers not completed): 和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})

edit: added models.py and views.py 编辑:添加了models.py和views.py

Is it correct to assume that your Installer model is some sort of profile-like model for your User model? 假设您的Installer模型是User模型的某种类似于个人档案的模型,是否正确?

If so, and once you have the relation between Install and Installer , things are much easier, if for example you defined the relation like: 如果是这样,并且一旦有了InstallInstaller之间的关系,那么事情就容易多了,例如,您定义了如下关系:

class Install(models.Model):
    installer = models.ForeignKey('Installer', related_name='installs')

as you could simply do in your view: 正如您可以简单地在您的视图中做的那样:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM