Vyplnit ForeignKey Pole v Django CreateView Automaticky

0

Otázka

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()
    # ---
1

Nejlepší odpověď

1

Toto řešení je použít, pouze pokud používáte django ModelForm.

class CreateArticle(CreateView):
    model = Snippet

    ......... 
    def form_valid(self, form):
        user = self.request.user
        form.instance.created_by = user if user else None
        return super(CreateArticle, self).form_valid(form)
    ......
2021-11-24 05:56:12

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................