[PYTHON] [Django] Registrierungsdaten für Benutzer im Registrierungs- / Bearbeitungsformular (Formular) anzeigen

Was du machen willst

Wenn ich in Model zwei Tabellen mit Einschränkungen für externe Schlüssel (FOREIGN KEY) vorbereite, möchte ich die Registrierungsdaten, die dem Benutzer (protokollierter Benutzer) zugeordnet sind, in Form anzeigen. Ich bin auf die Art und Weise gestoßen, wie ich die klassenbasierte generische Ansicht verwendet habe. Notieren Sie sich diese.

Erstellen Sie beispielsweise die folgende Todo-Liste. Derzeit können mehrere Kategorien für einen Todo-Artikel ausgewählt werden. todo_2.png

Angenommen, Sie haben zwei Kategorien als angemeldete Benutzer registriert (siehe unten). todo_3-crop.png

Zu diesem Zeitpunkt möchte ich (selbstverständlich) nur die Kategorie auswählen, die vom angemeldeten Benutzer im Registrierungs- und Bearbeitungsformular registriert wurde.

todo_1.png

Umgebung

Python 3.8.0 Django 3.0.4 Bootstrap 4.1.3 Plugin: django-bootstrap-modal-forms

Weise

Ich habe auf [diese Seite] verwiesen (https://stackoverflow.com/questions/24041649/filtering-a-model-in-a-createview-with-get-queryset).

Modell zu verwenden


# mypeoject/myapp/models.py
import datetime
from django.db import models


class Category(models.Model):
    category_name = models.CharField(max_length=20, unique=True)
    user = models.ForeignKey(
        'auth.User',
        on_delete=models.CASCADE
    )

    def __str__(self):
        return self.category_name


class TodoItem(models.Model):
    item = models.CharField(max_length=50)
    item_date = models.DateField(default=datetime.date.today)
    categories = models.ForeignKey(Category, null=True, on_delete=models.SET_NULL)
    user = models.ForeignKey(
        'auth.User',
        on_delete=models.CASCADE
    )

    def __str__(self):
        return self.item

Im obigen Beispiel verfügt das verwendete Modell über zwei Tabellen, eine TodoItem-Tabelle und eine Kategorietabelle mit einer Einschränkung für einen externen Schlüssel (FOREIGN KEY).

Forms.py bearbeiten


# mypeoject/myapp/forms.py
from bootstrap_modal_forms.forms import BSModalForm
from django import forms

from queryset_filtering_app.models import TodoItem, Category


class CreateUpdateTodoItemForm(BSModalForm):
    class Meta:
        model = TodoItem
        fields = ['item', 'item_date', 'categories']

    def __init__(self, *args, **kwargs):
        user = kwargs.pop('user')
        super(CreateUpdateTodoItemForm, self).__init__(*args, **kwargs)
        self.fields['categories'].queryset = Category.objects.filter(user=user)


class CreateCategoryForm(forms.ModelForm):
    class Meta:
        model = Category
        fields = ["category_name"]

forms.py fügt die Beschreibung von def \ _ \ _ init \ _ \ _ () wie oben hinzu.

Views.py bearbeiten


# mypeoject/myapp/views.py
class CreateTodoItemFormView(BSModalCreateView):
    template_name = 'template_name.html'
    form_class = CreateUpdateTodoItemForm
    success_message = 'Success: Item was created.'
    success_url = reverse_lazy('redirect_name')

    def get_form_kwargs(self):
        kwargs = super(CreateTodoItemFormView, self).get_form_kwargs()
        kwargs['user'] = self.request.user
        return kwargs

    def form_valid(self, form):
        form.instance.user_id = self.request.user.id
        return super(CreateTodoItemFormView, self).form_valid(form)


class UpdateTodoItemFormView(BSModalUpdateView):
    model = TodoItem
    template_name = 'template_name.html'
    form_class = CreateUpdateTodoItemForm
    success_message = 'Success: Item was updated.'
    success_url = reverse_lazy('redirect_name')

    def get_form_kwargs(self):
        kwargs = super(UpdateTodoItemFormView, self).get_form_kwargs()
        kwargs['user'] = self.request.user
        return kwargs

Fügen Sie in views.py die Beschreibung von def get \ _form \ _kwargs () wie oben hinzu. Der def form \ _valid () Teil von CreateView ist der Code zum Registrieren des angemeldeten Benutzers als Benutzer zum Zeitpunkt der Registrierung.

abschließend

Beschrieben, wie die dem Benutzer zugeordneten Registrierungsdaten im Registrierungs- / Bearbeitungsformular angezeigt werden. Ich denke, es ist ein grundlegender Punkt, aber wenn Sie ein Anfänger wie ich sind, können Sie möglicherweise keinen geeigneten Artikel finden und ihn möglicherweise nicht sofort lösen. Ich hoffe, Sie können sich darauf beziehen.

Recommended Posts

[Django] Registrierungsdaten für Benutzer im Registrierungs- / Bearbeitungsformular (Formular) anzeigen
Erstellen Sie den Registrierungsbildschirm für Django-Mitarbeiter mit Klasse neu
Zeigen Sie das Bild nach der Datenerweiterung mit Pytorch an
So registrieren Sie dieselben Daten mehrmals mit einer Eingabe auf dem Verwaltungsbildschirm von Django
Bis zum Start des Django-Tutorials mit Pycharm unter Windows
Erste Schritte mit dem Python-Framework Django unter Mac OS X.
[Django] Korrigieren Sie die Pluralform des Modellnamens auf dem Verwaltungsbildschirm
Probieren Sie Ajax auf der Django-Seite aus
Zeigen Sie den absoluten Pfad im Finder an
Bearbeiten Sie die Datei des SSH-Verbindungszielservers auf dem Server mit VS-Code
So registrieren Sie nur eine Daten auf dem Django-Verwaltungsbildschirm