如何通过django中当前登录的用户过滤(或所有)连接表的行?

时间:2014-07-08 17:05:27

标签: django

我的创作是关于票务,用户和资产的基本项目。这是一个典型的应用程序,公司必须列出谁拥有什么以及发生了什么问题。

到目前为止,我有(模特):

**** Tickets ******************

class Ticket(models.Model):    
    category = models.ForeignKey('TicketCategory')    
    issue = models.CharField(max_length=100)    
    user = models.ForeignKey('Users', blank=True,null=True,related_name="tickets")
    owner = models.ForeignKey(User)

**** Users *********************

class Users(models.Model):
    firstname = models.CharField(max_length=100)
    lastname = models.CharField(max_length=100)
    email = models.CharField(max_length=100, blank=True)
    business = models.ForeignKey('Business', blank=True, null=True,related_name="users")
    owner = models.ForeignKey(User)
    class Meta:
        db_table = 'users'
        verbose_name_plural = "users" 
        ordering = ["lastname"]

**** Assets *********************

class Assets(models.Model):
    serial = models.CharField(unique=False, max_length=100)
    brand = models.CharField(max_length=100)
    user = models.ForeignKey('Users', blank=True, null=True, related_name="assets")
    location = models.ForeignKey('AssetLocation', blank=False, null=False, related_name="assets")
    owner = models.ForeignKey(User)

我已将它们删除了一点以排除无用的信息。还有其他像AssetsLocations,Categories等,所有这些都采用相同的模式 - 所有者最终被添加为外键。

我已经创建了某种形式的身份验证,因此每个登录的用户都将拥有自己的故障单,资产和用户(实际是员工)。需要过滤,因此每次成功验证后都会显示每个用户的数据。

我正在使用CBV并覆盖get_queryset以启用当前登录用户的过滤:

Views.py

class TicketList(ListView):
    template_name = 'assets/ticket_list.html' 
    def get_queryset(self):
        user = self.request.user
        return Ticket.objects.filter(owner_id=user.id).select_related('user','asset','category') 
    def get_context_data(self, **kwargs):
        context = super(TicketList, self).get_context_data(**kwargs)
        context['totalTickets'] = self.get_queryset().count()
        context['tickets'] = self.get_queryset().select_related('user','asset','category')
        return context

一切正常,仅显示用户数据中的logged_in。然后我试图创建一个新的票证:

class TicketCreate(CreateView):
    fields = [ 'category', 'issue', 'user']
    template_name = 'assets/ticket_form.html'
    def get_queryset(self):
        user = self.request.user
        return Ticket.objects.filter(owner_id=user.id)
    def form_valid(self, form):
        self.object = form.save(commit=False)
        self.object.owner_id = self.request.user.id
        self.object.save()
        return HttpResponseRedirect(self.get_success_url())
    success_url = reverse_lazy('ticket_list')

我使用{{ form.category }}{{ form.issue }}等方式在表单模板中发布了所有内容。我面临的问题是表单中显示的下拉框,例如{{form .user}}应该只显示user.owner = self.request.user.id的用户,简单来说就是:所有者创建的用户。而不是它,显示数据库中的所有用户。

这个问题是不是很明显:)?

0 个答案:

没有答案