Я пытаюсь создать простую веб-страницу в Django, где пользователи смогут создавать базы данных через ModelForms и исследовать только свой собственный созданный контент. Они не смогут видеть данные, созданные другими пользователями. До сих пор я не мог понять, что каждый пользователь по-прежнему может видеть данные всех других пользователей.
В своем файле models.py я связал свою базу данных с пользователем по внешнему ключу. Я думаю, что проблема заключается в моем view.py, но я как-то застрял ..
Буду благодарен за любую помощь. Заранее спасибо!
Это мой models.py :
from django.db import models
from django.contrib.auth.models import User
CHOICES = (
('rent', 'Rent'),
('grocery', 'Grocery'),
('shopping', 'Shopping'),
('gym', 'Gym'),
('phone', 'Phone'),
('freetime', 'Freetime'),
('other', 'Other')
)
class UserDetails(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="new_spending", null=True)
title = models.CharField(max_length=100)
notes = models.CharField(max_length=255)
expense_name = models.CharField(max_length=255)
cost = models.FloatField()
date_added = models.DateTimeField()
category = models.CharField(max_length=25, choices=CHOICES)
def __str__(self):
return self.title
Мой forms.py :
from django import forms
from datetime import date
from django.forms import ModelForm
from .models import UserDetails
class UserModelForm(ModelForm):
current_date = date.today()
YEARS = [x for x in range(current_date.year - 1, current_date.year + 6)]
today = current_date.strftime("%Y-%m-%d")
date_added = forms.DateField(initial=today, widget=forms.SelectDateWidget(years=YEARS))
class Meta:
model = UserDetails
fields = ['title', 'notes', 'expense_name', 'cost', 'date_added', 'category']
Мой views.py :
from django.shortcuts import render
from django.http import HttpResponse
from django.db import models
from .models import UserDetails
from .forms import UserModelForm
def userDetails(request):
if request.method == 'POST':
form = UserModelForm(request.POST)
if form.is_valid():
u = form.save()
users = UserDetails.objects.all()
request.user.new_spending.add(u)
return render(request, 'budget_app/display.html', {
'users': users
})
else:
form_class = UserModelForm
return render(request, 'budget_app/userdetails.html', {
'form': form_class,
})
My html file :
{% extends 'budget_app/budget_base.html' %}
{% block content %}
<head>
<style>
table {
width:100%;
}
table, th, td {
border: 1px solid black;
border-collapse: collapse;
}
th, td {
padding: 15px;
text-align: left;
}
table#t01 tr:nth-child(even) {
background-color: #eee;
}
table#t01 tr:nth-child(odd) {
background-color: #fff;
}
table#t01 th {
background-color: black;
color: white;
}
</style>
</head>
<body>
</br>
<h2>Your Spending History</h2>
</br>
<table id="t01">
<tr>
<th>Title</th>
<th>gender</th>
<th>Notes</th>
<th>Expense name</th>
<th>Cost</th>
<th>Date</th>
<th>Category</th>
</tr>
{% for item in users %}
<tr>
<td>{{ item.title }}</td>
<td>{{ item.gender|default:"NA" }}</td>
<td>{{ item.notes }}</td>
<td>{{ item.expense_name }}</td>
<td>{{ item.cost }}</td>
<td>{{ item.date_added }}</td>
<td>{{ item.category }}</td>
</tr>
{% endfor %}
</table>
<br>
</body>
{% endblock %}