как я могу автоматически генерировать слаг для пользователя OneToOneField URL - PullRequest
0 голосов
/ 20 октября 2019

Я создаю приложение django, которое требует от пользователей входа в систему и наличия профилей, которые должны просматривать другие пользователи, но я застрял при создании уникальных URL-адресов для каждого пользователя. Я хочу, чтобы пользователь перенаправлялся на myexample.com/elon-musk вместо my-example.com/profile, чтобы каждая страница профиля пользователя была уникальной. Есть идеи, как мне это сделать? Заранее спасибо.

   models.py
class ContractorProfile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, related_name= 'profile',)
    image = models.ImageField(default='default.jpg', upload_to='profile_pics')
    first_name = models.CharField(max_length=20, blank=True)
    last_name = models.CharField(max_length=20, blank=True)
    slug = models.SlugField(null=True, blank=True)

    def save(self, *args, **kwargs):
        if slug is None:
        slug = slugify(self.user)
        while self.__class__.objects.filter(slug=slug).exists():
            slug = "%s-%s" % (slug,str(uuid.uuid4())[:5])
            self.slug = slug
        super(ContractorProfile, self).save(*args, **kwargs)

   views.py

   @login_required
def dynamic_lookup_view(request, user):
    obj = ContractorProfile.objects.get(user=user)
    return render (request, "CsignTest/profile.html", {"obj": obj})
   urls.py

re_path(r'^profile/(?P<user>\w+)/$', CsignTest_views.dynamic_lookup_view, name='user-prof'),

Ответы [ 2 ]

0 голосов
/ 22 октября 2019

я думаю, что вы пропустили себя и создали слаг из имени пользователя, потому что он уникален

def save(self, *args, **kwargs):
    if self.slug is None:
         self.slug = slugify(self.user.username)
    super(ContractorProfile, self).save(*args, **kwargs)

надеюсь, это поможет, и для администратора попробуйте это

from . models import your_model
from django.contrib import admin

class ArticleAdmin(admin.ModelAdmin):
    prepopulated_fields = {"slug": ("title",)} 

admin.site.register(your_modelname,ArticleAdmin)

это должноработать, потому что имя пользователя существует в модели пользователя django

0 голосов
/ 20 октября 2019

Вы можете просто создать поле предварительного заполнения в admin.py, как это

from . models import your_model
from django.contrib import admin

class ArticleAdmin(admin.ModelAdmin):
    prepopulated_fields = {"slug": ("title",)} 

admin.site.register(your_modelname,ArticleAdmin)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...