Ich habe eine Django-App, mit der jeder registrierte Benutzer Kategorien erstellen kann. Für die Authentifizierung verwende ich django-all-auth. Mein models.py
sieht wie folgt aus:Wie übergebe ich einen authentifizierten Benutzer an forms.py in django
class Profile(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
user = models.OneToOneField(User, on_delete=models.CASCADE)
create_date = models.DateTimeField('date added', auto_now_add=True)
modify_date = models.DateTimeField('date modified', default=timezone.now)
class Category(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
user = models.ForeignKey(Profile, on_delete=models.CASCADE)
name = models.CharField(max_length=200, unique=True)
create_date = models.DateTimeField('date added', auto_now_add=True)
modify_date = models.DateTimeField('date modified', default=timezone.now)
auf der Indexseite der Benutzer die erstellten Kategorien sehen und neue zu schaffen. Die views.py:
def CategoryView(request):
user = 0
if request.user.is_authenticated():
user = request.user
form = CategoryNameForm()
form.user = user
context = {
'categories': Category.objects.all(),
'form': form,
'user':user,
}
if request.method == 'POST':
form = CategoryNameForm(request.POST)
form.user = user
if form.is_valid():
form.save()
return render(request, 'myapp/index.html',context)
forms.py: Klasse CategoryNameForm (forms.ModelForm):
class Meta:
model = Category
fields = ('name',)
Die Authentifizierung funktioniert. So wurde ich denke nur passieren legt das Benutzerfeld in das Formular:
class CategoryNameForm(forms.ModelForm):
class Meta:
model = Category
fields = ('name','user',)
es verstecken und dann, nur wählen Sie es über JS, da der Benutzer im Kontext ist. Ich habe mich nur gefragt, ob es einen einfacheren Weg gibt. Diese form.user = user
aus irgendeinem Grund nicht funktioniert hat, erhalte ich eine NOT NULL Ausfall
also möchten Sie sicherstellen, dass nur eingeloggte Benutzer zugreifen können? Wie wäre es mit '@ login_required' in der Datei view.py? – hansTheFranz