将用户名分配给 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.