장고 앱을 만들면 사용자가 계정을 만들고 각 계정에 거래를 추가 할 수 있습니다. 사용자가 투자 이익을 추적 할 수있는 사이트의 일부입니다. 이를 달성하기 위해 제네릭 클래스 뷰를 사용하고 있습니다.장고 일반보기에 대한 액세스 제한
사용자는 트랜잭션을 특정 계정 (코드는 표시되지 않음)에 추가 한 다음 site/transactions/2 /를 사용하여 특정 계정에 대한 트랜잭션을 볼 수 있어야합니다. 여기서 2는 계정 ID입니다.
문제는 로그인 한 사용자가 다른 사용자의 계정 트랜잭션을 가져 오기 위해 URL을 변경할 수 있다는 것입니다. 주어진 계정 ID가 사용자에게 속하는지 확인하여 쉽게 수정할 수 있지만 더 나은 방법이 있어야한다고 생각합니다. 내가 이것을 성취 할 수있는 더 좋은 방법이 있습니까? URL 인코딩하지 않을까요? 나는 어쨌든 DB에 자신의 계정 ID를 보는 사용자의 생각을 좋아하지 않습니다.
또한 나중에 사용자가 일부 계정의 거래를 단일 목록에서 볼 수 있도록하고 싶습니다. 예를 들어 5 개의 계정 중 3 개의 거래를 모두 표시합니다. 그렇다면이 URL 메서드는 실제로 작동하지 않습니다. 여기에 어떤 다른 옵션이 있습니까? views.py에서
url(r'^(?P<account_id>\d+)/$', views.IndexView.as_view(), name='index'),
:
class Account(models.Model):
name = models.CharField(max_length=40, unique=True, db_index=True)
user = models.ForeignKey(User)
class Transaction(models.Model):
value = models.DecimalField(max_digits=15, decimal_places=2)
date = models.DateField('transaction date')
account = models.ForeignKey(Account)
urls.py에서 : models.py에서
내가 가진
class IndexView(LoginRequiredMixin, generic.ListView):
model = Transaction
def get_queryset(self):
account_id = self.kwargs['account_id']
queryset = Transaction.objects.filter(account_id=account_id)
return queryset
을 그리고 나는 transaction_list
템플릿을
감사합니다.
정말 고마워요! 나는 그것이 그것을해야한다고 생각한다. 나는 장고에 대해 아주 익숙하다. 그래서이 예제와 같이 URL에 데이터베이스 필드 ID를 갖는 것이 좋은가? – Johan
꽤 표준입니다. 더 좋고 더 친숙한 방법은 슬러그를 대신 사용하는 것입니다. 하지만 이드를 사용하는 것은 나쁜 습관이라고 생각하지 않습니다. – jproffitt