我的创作是关于票务,用户和资产的基本项目。这是一个典型的应用程序,公司必须列出谁拥有什么以及发生了什么问题。
到目前为止,我有(模特):
**** 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的用户,简单来说就是:所有者创建的用户。而不是它,显示数据库中的所有用户。
这个问题是不是很明显:)?