Фильтр набора данных на основе входа в учетную запись
Я пытаюсь отфильтровать набор данных, отображаемый в моей таблице, на основе пользователя, который вошел в систему на предыдущей странице. Мое приложение настроено таким образом, что это простой экран входа в систему, где вы вводите имя пользователя и пароль, а затем есть один набор данных, содержащий два экрана: 1 = Неделя, 2 = Выборы. На первом экране вы выбираете, для какой недели вы хотите выбрать пикчеры, и после нажатия на неделю вы можете изменить свои пикчеры.
Когда я создавал приложения в различных решениях, моей идеей было хранить имя пользователя или неделю в качестве переменной, а затем фильтровать набор данных только на записи, относящиеся к этому критерию, но я не уверен, как это сделать в Django. Какие есть мысли?
У меня есть следующий код:
views.py
class PickList(LoginRequiredMixin, CoreListView):
model = Pick
def user_picks(request):
Pick.objects.filter(submitter={{ request.user.get_full_name|default:request.user }})
return render(request, 'app/pick_list.html', {'Pick': Pick})
app urls.py
urlpatterns = [
path('', home, name='home'),
path('picks/', PickList.as_view(), name='pick-list'),
path('pick/<int:pk>/', PickDetail.as_view(), name='pick-detail'),
path('picks/<str:submitter>', user_picks(), name='pick-list'),
path('weeks/', WeekList.as_view(), name='week-list'),
path('weeks/<int:pk>/', WeekDetail.as_view(), name='week-detail'),
]
account urls.py
urlpatterns = [
path('login/', views.LoginView.as_view(template_name='account/signin.html',
authentication_form=AuthenticationForm,
extra_context={
'title': 'Login',
'extra_title': 'Please sign in',
}), name='login'),
path('logout/', views.LogoutView.as_view(next_page='account:login'), name='logout'),
]
models.py
class Pick(models.Model):
submitter = models.CharField(max_length=50, verbose_name='Submitter', null=True, blank=True)
week = models.CharField(max_length=50, verbose_name='Week', null=True, blank=True)
name = models.CharField(max_length=50, verbose_name='Name', null=True, blank=True)
photo = models.ImageField(upload_to="media", max_length=500, verbose_name='Photo', null=True, blank=True)
rank = OrderField(verbose_name='Rank', null=True, blank=True)
def __str__(self):
return self.name
def get_fields(self):
return [(field.verbose_name, field.value_from_object(self)) for field in self.__class__._meta.fields]
def get_absolute_url(self):
return reverse('app:pick-update', kwargs={'pk': self.pk})
class Meta:
db_table = 'pick'
ordering = ['rank']
verbose_name = 'Pick'
verbose_name_plural = 'Picks'
error on urls.py:
TypeError: user_picks() missing 1 required positional argument: 'request'
В вашем файле app/urls.py:
path('picks/<str:submitter>', user_picks(), name='pick-list'),
Вы не предоставляете функцию представления, а вызываете ее. Возможно, вы захотите исправить это таким образом :
path('picks/<str:submitter>', user_picks, name='pick-list'),