I’m creating a simple To Do app using Django 3.2, and I have stuck in a error which is: FieldError: Cannot resolve keyword 'user' into field. Choices are: content, created, email, id, name, user1, user1_id
This is models.py:
JavaScript
x
19
19
1
from django.db import models
2
from django.db.models.deletion import CASCADE
3
from django.db.models.fields import CharField
4
from django.contrib.auth.models import User
5
6
# Create your models here.
7
8
9
class User(models.Model):
10
content = models.CharField(max_length=200, null=True)
11
created = models.DateTimeField(auto_now_add=True)
12
name = models.CharField(max_length=200, null=True)
13
email = models.CharField(max_length=200, null=True)
14
15
user1 = models.ForeignKey(User, on_delete=CASCADE)
16
17
def __str__(self):
18
return self.content
19
forms.py
JavaScript
1
11
11
1
from django import forms
2
from django.forms import ModelForm, fields
3
from django.contrib.auth.forms import UserCreationForm
4
from django.contrib.auth.models import User
5
from django import forms
6
7
class CreateUserForm(UserCreationForm):
8
class Meta:
9
model = User
10
fields = ['username', 'first_name', 'last_name', 'email', 'password1', 'password2']
11
views.py
JavaScript
1
64
64
1
from django.shortcuts import render, redirect
2
from django.http.response import HttpResponse
3
from django.utils import timezone
4
from django.contrib.auth import authenticate, login, logout
5
from django.contrib.auth.decorators import login_required
6
7
from demo.forms import CreateUserForm
8
9
from .models import *
10
from .models import __str__
11
12
# Create your views here.
13
14
@login_required(login_url='/login')
15
def home(request):
16
user = request.user
17
18
all_items = User.objects.filter(user=user).order_by("created")
19
20
context = {'all_items': all_items}
21
return render(request, 'html/home.html', context)
22
23
@login_required(login_url='/login')
24
def add_content(request):
25
current_date = timezone.now()
26
newItem = User(content=request.POST.get('content'))
27
newItem.save()
28
return redirect('/')
29
30
@login_required(login_url='/login')
31
def login_user(request):
32
if request.method == 'POST':
33
username = request.POST.get('username')
34
password = request.POST.get('password')
35
36
user = authenticate(request, username=username, password=password)
37
38
if user is not None:
39
login(request, user)
40
return redirect('/')
41
return render(request, 'html/login.html')
42
43
def logoutUser(request):
44
logout(request)
45
return redirect('login/')
46
47
def register_user(request):
48
form = CreateUserForm()
49
if request.method == 'POST':
50
form = CreateUserForm(request.POST)
51
if form.is_valid():
52
user = form.save(commit=False)
53
user.save()
54
55
user = authenticate(request, username=user.username, password=request.POST.get('password1'))
56
57
if user is not None:
58
login(request, user)
59
return redirect('/')
60
61
context = {'form':form}
62
63
return render(request, 'html/register.html', context)
64
home.html
JavaScript
1
23
23
1
<div>
2
<form class="felx" action="add_content/" method="POST">
3
{% csrf_token %}
4
<input class="form-control me-2" type="text" name="content" placeholder="Hey">
5
<button id="add-btn" class="button" type="submit">Add</button>
6
</form>
7
8
<table>
9
<thead>
10
{% for all_item in all_items %}
11
<tr>
12
<td>{{ all_item.content }}</td>
13
</tr>
14
{% endfor %}
15
</thead>
16
</table>
17
<a href="{% url 'demo:login' %}">Logout</a>
18
19
{% if request.user.is_authenticated %}
20
<p>Hello {{request.user}}</p>
21
{% endif %}
22
</div>
23
By far, any data that is added can be access by every account, but what i’m trying to do is that each user has his own data or tasks in this case. Would appreciate any idea! Thanks
Advertisement
Answer
i think your problem is here
JavaScript
1
16
16
1
@login_required(login_url='/login')
2
def home(request):
3
user = request.user.pk
4
5
all_items = User.objects.filter(user1_id=user).order_by("created") #new
6
7
context = {'all_items': all_items}
8
return render(request, 'html/home.html', context)
9
10
@login_required(login_url='/login')
11
def add_content(request):
12
current_date = timezone.now()
13
newItem = User(content=request.POST.get('content'),user1_id=request.user.pk)
14
newItem.save()
15
return redirect('/')
16
Advice:Please try to change the User in models.py to an other name because Django has by default a model called User.