我正在尝试制作一些表单,允许用户添加一些对象、删除它们或编辑,但我一直坚持模型作者之类的内容。假设我们得到了带有场的模型镜头
author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
因为我创建了自定义用户模型来通过我想要的一些字段来扩展用户,然后我们创建 modelForm,创建视图等,最后得到表单。当我们尝试提交此表单时,它不会将表单中提交的对象添加到数据库中,因为表单没有填充字段作者作者,这意味着该字段== Null,这就是为什么它不会将其添加到数据库中。所以我的问题是如何使其动态化,例如,当昵称“thebestuser”的用户尝试添加此 modelForm 时,它将起作用并将作者标记为“thebestuser”? Ofc 我可以添加到表单字段作者,但在我看来这是最糟糕的方式,然后每个用户都可以添加对象,例如作为另一个用户,假设带有昵称“anothernick”的用户可以添加表单作为带有“的用户” thebestuser”,我认为这是不可接受的。
模型.py
from django.db import models
from django.contrib.auth.models import User
from streamers.models import Streamer
from django.conf import settings
from django.utils import timezone
class Shot(models.Model):
author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
title = models.CharField(max_length=70)
url = models.CharField(max_length=100)
streamer = models.ForeignKey(Streamer, on_delete=models.CASCADE)
published_date = models.DateTimeField(default=timezone.now)
def __str__(self):
return self.title
forms.py
from django import forms
from .models import Shot
class AddShot(forms.ModelForm):
class Meta:
model = Shot
fields = [
'title',
'url',
'streamer',
]
views.py
@login_required
def add_shot(request):
form = AddShot(request.POST or None)
if form.is_valid():
form.save()
instance = form.save(commit=False)
instance.published_date = request.published_date
instance.author = request.user
instance.save()
context = {
'form': form
}
return render(request, 'shots/add_shot.html', context)