如何修复:无法将关键字“用户”解析为字段

我是 Django 的初学者,我正在尝试在我的 Django 规划器中实现登录系统。


错误:


/login_user/ 处的 FieldError 无法将关键字“用户”解析为字段。选项有:描述、结束时间、id、开始时间、标题


我已经尝试将用户字段添加到我在 model.py 上的事件模型中并迁移它,但它只会使整个应用程序崩溃。


视图.py

def event(request, event_id=None):

    instance = Event()

    if event_id:

        instance = get_object_or_404(Event, pk=event_id)

    else:

        instance = Event()


    form = EventForm(request.POST or None, instance=instance)

    if request.POST and form.is_valid():

        form.save()

        return HttpResponseRedirect(reverse('cal:calendar'))

    return render(request, 'cal/event.html', {'form': form})


def login_user(request):


    if request.method == "POST":

        

        username = request.POST['username']

        password = request.POST['password']

        user = authenticate(username=username, password=password)


        if user is not None:

            if user.is_active:

                events = Event.objects.filter(user=request.user)

                login(request, user)

                return render(request, 'cal/calendar.html', {'calendar': calendar})

            else:

                return render(request, 'cal/login.html', {'error_message': 'Your account has been disabled'})

        else:

            return render(request, 'cal/login.html', {'error_message': 'Invalid login'})

    return render(request, 'cal/login.html')

表格.py

class UserForm(forms.ModelForm):

  password = forms.CharField(widget=forms.PasswordInput)


  class Meta:

    model = User

    fields = ['username', 'email', 'password',]

模型.py

from django.contrib.auth.models import Permission, User

from django.db import models


class Event(models.Model):

    #user = models.ForeignKey(User, default=1)

    title = models.CharField(max_length=200)

    description = models.TextField()

    start_time = models.DateTimeField()

    end_time = models.DateTimeField()


    @property

    def get_html_url(self):

        url = reverse('cal:event_edit', args=(self.id,))

        return f'<a href="{url}"> {self.title} </a>'


汪汪一只猫
浏览 351回答 2
2回答

长风秋雁

在您的视图中,您正在使用关键字 user 过滤 Event 对象,但您的事件模型没有名为 user 的字段。如果您希望您的事件与用户相关联,您可以将外键添加到您的事件模型中:class Event(models.Model):&nbsp; &nbsp; user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.PROTECT)&nbsp; &nbsp; title = models.CharField(max_length=200)&nbsp; &nbsp; description = models.TextField()&nbsp; &nbsp; start_time = models.DateTimeField()&nbsp; &nbsp; end_time = models.DateTimeField()&nbsp; &nbsp; @property&nbsp; &nbsp; def get_html_url(self):&nbsp; &nbsp; &nbsp; &nbsp; url = reverse('cal:event_edit', args=(self.id,))&nbsp; &nbsp; &nbsp; &nbsp; return f'<a href="{url}"> {self.title} </a>'或者,在您看来,您可以简单地通过另一个关键字过滤您的 Event 对象,这些关键字是您的错误为您提供的选择,以及您在模型中指定的字段。所以在你看来你可以这样做:def login_user(request):&nbsp; &nbsp; if request.method == "POST":&nbsp; &nbsp; &nbsp; &nbsp; username = request.POST['username']&nbsp; &nbsp; &nbsp; &nbsp; password = request.POST['password']&nbsp; &nbsp; &nbsp; &nbsp; user = authenticate(username=username, password=password)&nbsp; &nbsp; &nbsp; &nbsp; if user is not None:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if user.is_active:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; events = Event.objects.filter(title='Title you want to filter by') # This line seems to be the source of your error. You just need to filter by a keyword that exists in your model.&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; login(request, user)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return render(request, 'cal/calendar.html', {'calendar': calendar})&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return render(request, 'cal/login.html', {'error_message': 'Your account has been disabled'})&nbsp; &nbsp; &nbsp; &nbsp; else:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return render(request, 'cal/login.html', {'error_message': 'Invalid login'})&nbsp; &nbsp; return render(request, 'cal/login.html')

不负相思意

在您的 models.py 中,您错过了为您的用户表添加关系。添加用户并执行python manage.py makemigrations myapppython manage.py 迁移 myappfrom django.contrib.auth import get_user_modelclass Event(models.Model):&nbsp; &nbsp; user = models.ForeignKey(get_user_model(), null=True)&nbsp; &nbsp; title = models.CharField(max_length=200)&nbsp; &nbsp; description = models.TextField()&nbsp; &nbsp; start_time = models.DateTimeField()&nbsp; &nbsp; end_time = models.DateTimeField()&nbsp; &nbsp; @property&nbsp; &nbsp; def get_html_url(self):&nbsp; &nbsp; &nbsp; &nbsp; url = reverse('cal:event_edit', args=(self.id,))&nbsp; &nbsp; &nbsp; &nbsp; return f'<a href="{url}"> {self.title} </a>'
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python