Tady je můj scénář. Chci jeden z mých model pole bude auto-vyplnit na základě toho, zda je uživatel ověřen, nebo ne. Jako, když uživatel odešle formulář, já třeba zkontrolovat, zda je uživatel ověřen a pak vyplnit created_by
pole s <User Object>
jinak, nechte to Null
pokud je to možné.
Tady je můj model:
class Snippet(models.Model):
# ---
create_by = models.ForeignKey(
User,
on_delete = models.CASCADE,
null=True,
)
# ---
Tady je můj názor:
class SnippetCreateView(CreateView):
# ---
def save(self, request, *args, **kwargs):
if request.user.is_authenticated:
user = User.objects.get(username=request.user.username)
request.POST['create_by'] = user # --->> TraceBack: due to immutability..
return super().post(request, *args, **kwargs)
# ---
Od request.POST
QueryDict je neměnná, jak se může implementovat?? Zkoušel jsem více způsobů, jako vytvoření kopie, která ale nic se neděje a to nic nezmění.
Ale..
Mohu realizovat to takhle a funguje to bez problémů. Myslím, že tohle řešení je dost špinavé, aby najít lepší způsob, jak. Co si myslíte o tomto řešení??
class Snippet.CreateView(CreateView):
# ---
def save(self, request, *args, **kwargs):
if request.user.is_authenticated:
user = User.objects.get(username=request.user.username)
data = {
'title': request.POST['title'],
# ---
'create_by': user if user else None,
}
snippet = Snippet.objects.create(**data).save()
# redirecting to Snippet.get_absolute_url()
# ---