将用户名分配给 models.py table 中的字段
Assign username to field in models.py table
假设我有一个包含 5 个数据的表 1,
> class Table1(models.Model):
> code = models.CharField(max_length=16,unique=True)
>
> author_Up = models.CharField(max_length=16,default=User)
> date_Up = models.DateTimeField(auto_now=True)
> post_date = models.DateTimeField(default=timezone.now)
> author = models.ForeignKey(User,on_delete=models.CASCADE)
> def __str__(self):
> return self.code
我正在使用 formes.py 作为:
class Table1_F(forms.ModelForm):
code = forms.CharField(label='Code',max_length=16)
class Meta:
model= Table1
fields=['code']
问题是每次其他用户进行更新并保留初始作者时,我都需要分配一个新值 (author_Up) 和 (date_Up)。
请问我该如何解决?
我建议使用 ForeignKey
来引用 autohr,并进一步使用 auto_now_add
作为 post_date
字段:
from django.conf import settings
class Table1(models.Model):
code = models.CharField(max_length=16,unique=True)
author_Up = models.ForeignKey(
<b>settings.AUTH_USER_MODEL</b>,
related_name='updated_posts',
on_delete=models.CASCADE
)
date_Up = models.DateTimeField(auto_now=True)
post_date = models.DateTimeField(<b>auto_now_add=True</b>)
author = models.ForeignKey(
<b>settings.AUTH_USER_MODEL</b>,
related_name='written_posts',
on_delete=models.CASCADE
)
def __str__(self):
return self.code
在UpdateView
中,我们现在可以更新用户模型:
from django.contrib.auth.mixins import LoginRequiredMixin
from django.views.generic import UpdateView
class MyUpdateView(LoginRequiredMixin, UpdateView):
model = Table1
form = Table1_F
def form_valid(self, form):
form<b>.instance.author_Up = self.request.user</b>
return super().form_valid(form)
在CreateView
中,我们可以设置author
,如果有必要,可以设置authorUp
:
from django.contrib.auth.mixins import LoginRequiredMixin
from django.views.generic import CreateView
class MyUpdateView(LoginRequiredMixin, CreateView):
model = Table1
form = Table1_F # might be another form
def form_valid(self, form):
form<b>.instance.author_Up = self.request.user</b>
form<b>.instance.author = self.request.user</b>
return super().form_valid(form)
Note: It is normally better to make use of the settings.AUTH_USER_MODEL
[Django-doc] to refer to the user model, than to use the User
model [Django-doc] directly. For more information you can see the referencing the User
model section of the documentation.
假设我有一个包含 5 个数据的表 1,
> class Table1(models.Model):
> code = models.CharField(max_length=16,unique=True)
>
> author_Up = models.CharField(max_length=16,default=User)
> date_Up = models.DateTimeField(auto_now=True)
> post_date = models.DateTimeField(default=timezone.now)
> author = models.ForeignKey(User,on_delete=models.CASCADE)
> def __str__(self):
> return self.code
我正在使用 formes.py 作为:
class Table1_F(forms.ModelForm):
code = forms.CharField(label='Code',max_length=16)
class Meta:
model= Table1
fields=['code']
问题是每次其他用户进行更新并保留初始作者时,我都需要分配一个新值 (author_Up) 和 (date_Up)。
请问我该如何解决?
我建议使用 ForeignKey
来引用 autohr,并进一步使用 auto_now_add
作为 post_date
字段:
from django.conf import settings
class Table1(models.Model):
code = models.CharField(max_length=16,unique=True)
author_Up = models.ForeignKey(
<b>settings.AUTH_USER_MODEL</b>,
related_name='updated_posts',
on_delete=models.CASCADE
)
date_Up = models.DateTimeField(auto_now=True)
post_date = models.DateTimeField(<b>auto_now_add=True</b>)
author = models.ForeignKey(
<b>settings.AUTH_USER_MODEL</b>,
related_name='written_posts',
on_delete=models.CASCADE
)
def __str__(self):
return self.code
在UpdateView
中,我们现在可以更新用户模型:
from django.contrib.auth.mixins import LoginRequiredMixin
from django.views.generic import UpdateView
class MyUpdateView(LoginRequiredMixin, UpdateView):
model = Table1
form = Table1_F
def form_valid(self, form):
form<b>.instance.author_Up = self.request.user</b>
return super().form_valid(form)
在CreateView
中,我们可以设置author
,如果有必要,可以设置authorUp
:
from django.contrib.auth.mixins import LoginRequiredMixin
from django.views.generic import CreateView
class MyUpdateView(LoginRequiredMixin, CreateView):
model = Table1
form = Table1_F # might be another form
def form_valid(self, form):
form<b>.instance.author_Up = self.request.user</b>
form<b>.instance.author = self.request.user</b>
return super().form_valid(form)
Note: It is normally better to make use of the
settings.AUTH_USER_MODEL
[Django-doc] to refer to the user model, than to use theUser
model [Django-doc] directly. For more information you can see the referencing theUser
model section of the documentation.