Python 如何在模型或视图中请求用户登录
我是Django的新手,我不知道如何通过请求获取用户名。我在词汇类型的网站上工作,我需要每个用户创建的条目都有用户名 这是我的模特Python 如何在模型或视图中请求用户登录,python,django,request,Python,Django,Request,我是Django的新手,我不知道如何通过请求获取用户名。我在词汇类型的网站上工作,我需要每个用户创建的条目都有用户名 这是我的模特 from django.db import models class EngDict(models.Model): orig_word = models.CharField(max_length=500, null=False,blank=False, verbose_name='Слово') translate = models.CharFi
from django.db import models
class EngDict(models.Model):
orig_word = models.CharField(max_length=500, null=False,blank=False, verbose_name='Слово')
translate = models.CharField(max_length=500,null=False,blank=False, verbose_name="Перевод")
remarks = models.TextField(null=True, blank=True, verbose_name="Примечания")
published_by = models.CharField(max_length=50, verbose_name="Добавлено")
published_date = models.DateTimeField(auto_now_add=True, db_index=True, verbose_name="Дата добавления")
category = models.ForeignKey('Category', null=True, blank=True, on_delete=models.PROTECT, verbose_name = 'Категория')
class Meta:
verbose_name = ("Перевод")
verbose_name_plural = "Англо-русский словарь"
ordering = ['-published_date']
这是views.py
from django.shortcuts import render
from django.template import loader
from .models import EngDict, Category
from django.views.generic.edit import CreateView
from .forms import EngDictForm
from django.urls import reverse_lazy
from django.views.generic import TemplateView, ListView, FormView
from django.db.models import Q
from django.contrib.auth.forms import AuthenticationForm
from django.contrib.auth import login
class EngDictCreateView(CreateView):
template_name = 'dict/create.html'
form_class = EngDictForm
success_url = reverse_lazy('index')
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['categories'] = Category.objects.all()
return context
我知道我需要一些函数,比如def user_name(request),但我不明白应该在哪里写它,以及里面必须包含什么。我需要发布的变量是自动填写用户登录名
在forms.py中添加了排除
from django.forms import ModelForm
from .models import EngDict
from django import forms
class EngDictForm (ModelForm):
def clean_orig_word(self):
data = self.cleaned_data['orig_word']
if EngDict.objects.filter(orig_word = data).count():
raise forms.ValidationError("ТАКОЕ СЛОВО УЖЕ ЕСТЬ!")
return data
class Meta:
model = EngDict
fields = ('orig_word', 'translate', 'remarks', 'published_by')
exclude =['published_by']
请不要为此使用CharField
。如果以后用户更改了用户名,则它指的是不再存在的用户。要引用另一个对象,可以使用关系字段,如、或、。在这里,它看起来像一个外键
是您正在寻找的:
from django.conf import settings
class EngDict(models.Model):
orig_word = models.CharField(max_length=500, null=False,blank=False, verbose_name='Слово')
translate = models.CharField(max_length=500,null=False,blank=False, verbose_name='Перевод')
remarks = models.TextField(null=True, blank=True, verbose_name='Примечания')
published_by = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.PROTECT,
editable=False,
verbose_name='Добавлено'
)
published_date = models.DateTimeField(auto_now_add=True, db_index=True, verbose_name='Дата добавления')
category = models.ForeignKey('Category', null=True, blank=True, on_delete=models.PROTECT, verbose_name = 'Категория')
class Meta:
verbose_name = ('Перевод')
verbose_name_plural = 'Англо-русский словарь'
ordering = ['-published_date']
注意:您可以将基于类的视图限制为具有
请不要为此使用CharField
。如果以后用户更改了用户名,则它指的是不再存在的用户。要引用另一个对象,可以使用关系字段,如、或、。在这里,它看起来像一个外键
是您正在寻找的:
from django.conf import settings
class EngDict(models.Model):
orig_word = models.CharField(max_length=500, null=False,blank=False, verbose_name='Слово')
translate = models.CharField(max_length=500,null=False,blank=False, verbose_name='Перевод')
remarks = models.TextField(null=True, blank=True, verbose_name='Примечания')
published_by = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.PROTECT,
editable=False,
verbose_name='Добавлено'
)
published_date = models.DateTimeField(auto_now_add=True, db_index=True, verbose_name='Дата добавления')
category = models.ForeignKey('Category', null=True, blank=True, on_delete=models.PROTECT, verbose_name = 'Категория')
class Meta:
verbose_name = ('Перевод')
verbose_name_plural = 'Англо-русский словарь'
ordering = ['-published_date']
注意:您可以将基于类的视图限制为具有
这回答了你的问题吗?这回答了你的问题吗?我更新了问题。在forms.py中添加了exclude。现在我遇到了错误“没有这样的列:dict_engdict.published_by_id”我尝试迁移,但出现了错误:django.db.utils.integrityyror:表'dict_engdict'中主键为'2'的行有一个无效的外键:dict_engdict.published_by_id包含一个值'Alexander',在auth_user.id中没有相应的值。Ok。我已经删除了所有的条目。成功完成了迁移,现在可以正常工作了!添加简单的用户名会带来很多麻烦。非常感谢。我更新了问题。在forms.py中添加了exclude。现在我遇到了错误“没有这样的列:dict_engdict.published_by_id”我尝试迁移,但出现了错误:django.db.utils.integrityyror:表'dict_engdict'中主键为'2'的行有一个无效的外键:dict_engdict.published_by_id包含一个值'Alexander',在auth_user.id中没有相应的值。Ok。我已经删除了所有的条目。成功完成了迁移,现在可以正常工作了!添加简单的用户名会带来很多麻烦。非常感谢。