为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

汪汪一只猫 2021-12-16 16:27:52
我是 Django 的初学者,我正在尝试在我的 Django 规划器中实现登录系统。错误:/login_user/ 处的 FieldError 无法将关键字“用户”解析为字段。选项有:描述、结束时间、id、开始时间、标题我已经尝试将用户字段添加到我在 model.py 上的事件模型中并迁移它,但它只会使整个应用程序崩溃。视图.pydef 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')表格.pyclass UserForm(forms.ModelForm):  password = forms.CharField(widget=forms.PasswordInput)  class Meta:    model = User    fields = ['username', 'email', 'password',]模型.pyfrom django.contrib.auth.models import Permission, Userfrom django.db import modelsclass 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>'
查看完整描述

2 回答

?
长风秋雁

TA贡献1757条经验 获得超7个赞

在您的视图中,您正在使用关键字 user 过滤 Event 对象,但您的事件模型没有名为 user 的字段。如果您希望您的事件与用户相关联,您可以将外键添加到您的事件模型中:


class Event(models.Model):

    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.PROTECT)

    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>'

或者,在您看来,您可以简单地通过另一个关键字过滤您的 Event 对象,这些关键字是您的错误为您提供的选择,以及您在模型中指定的字段。所以在你看来你可以这样做:


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(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.

                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')


查看完整回答
反对 回复 2021-12-16
?
不负相思意

TA贡献1777条经验 获得超10个赞

在您的 models.py 中,您错过了为您的用户表添加关系。添加用户并执行


python manage.py makemigrations myapp


python manage.py 迁移 myapp


from django.contrib.auth import get_user_model


class Event(models.Model):

    user = models.ForeignKey(get_user_model(), null=True)

    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>'


查看完整回答
反对 回复 2021-12-16
  • 2 回答
  • 0 关注
  • 350 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信