Ich möchte zulassen, dass Benutzer nur ihr Profil bearbeiten. Dies ist meine URL:Django --- Zulassen, dass Benutzer nur ihr Profil bearbeiten können
url(r'^profile/(?P<pk>[0-9]+)/$', views.UserUpdate.as_view(), name='profile')
Nun, wenn der Benutzer, klicken Sie auf ‚Mein Profil‘ sie ihr eigenes Profil bekommen, die sie bearbeiten können, aber wenn sie manuell den URLPath in Browser bearbeiten und andere Benutzer-ID eingeben, wie unten, sie können andere Benutzer-Profile anzeigen und bearbeiten
http://127.0.0.1:8000/profile/1/
das ist meine Ansicht
class UserUpdate(UpdateView):
model = Profile
fields = ['personal_info','job_title','department', 'location','expertise', 'user_photo','phone_number','contact_facebook','contact_linkedin','contact_skype']
template_name = 'user_form.html'
success_url = reverse_lazy('index')
Jetzt in user_form.html ich überprüft haben, ob der Benutzer authentifiziert ist, so dass vie können nur angemeldete Benutzer w die Profilseite, aber immer noch angemeldet Benutzer kann das Profil eines anderen Benutzers sehen.
{% if user.is_authenticated %}
<h3> {{ user.first_name }}'s Profile</h3>
<form class="form-horizontal" action="" method="post" enctype="multipart/form-data">
{% csrf_token %}
{% include 'form-template.html' %}
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button type = "submit" class="btn btn-success">Submit</button>
<a href={% url 'index' %}><input type="button" class = " col-sm-offset-2 btn btn-warning " name="cancel" value="Cancel" /></a>
</div>
</div>
</form>
Das ist mein Modell:
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
personal_info = models.TextField(blank=True)
job_title = models.CharField(max_length=100, blank=True)
department = models.CharField(max_length=100, blank=True)
location = models.CharField(max_length=100, blank=True)
expertise = models.TextField(blank=True)
phone_regex = RegexValidator(regex=r'^\+?1?\d{5,15}$', message="Phone number must be entered in the format: '+123456'. Between 5 and 15 digits allowed.")
phone_number = models.CharField(validators=[phone_regex], max_length=16, blank=True)
contact_skype = models.URLField(null=True, blank=True)
contact_facebook = models.URLField(null=True, blank=True)
contact_linkedin = models.URLField(null=True, blank=True)
user_photo = models.ImageField(upload_to='../media/img', blank=True)
@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
if created:
Profile.objects.create(user=instance)
instance.profile.save()
@receiver(post_save, sender=User)
def save_user_profile(sender, instance, **kwargs):
instance.profile.save()
Wie kann ich angemeldeten Benutzer beschränken, um nur ihr Profil zu bearbeiten? Ich weiß, dass es viele ähnliche Fragen und mögliche doppelte Überlauf im Stapel gibt, aber keine schien mir meinen Fall zu helfen.
Vielen Dank im Voraus
@dan_kaufhold, aber dies füllt das Profilformular nicht mit aktuellen Daten. Ich will Felder mit ihren aktuellen Werten gefüllt werden – Uttam
@Alasdair danke! Die Antwort wurde aktualisiert. –
@ user3612693 Wenn Sie dies verwenden, enthält die Vorlage die Variable '{{Objekt}}', die Sie für Felder des Profils referenzieren können, und die Variable '{{Formular}}', um ein Formular mit allen von Ihnen definierten Feldern zu rendern. Sie haben dann die Anfangswerte der geladenen Objekte. –