Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 17, 2014 15:26:38

aleksander937
Зарегистрирован: 2014-11-17
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

получить логин пользователя

У меня вопрос довольно простой, но ответа нормального не нашел, поэтому лучше не тратить время на ответы “погугли” или “посмотри в мануале”.
Суть задачки такова: любой зарегистрированный пользователь может добавлять запись в базу данных

class Poll(models.Model):
name = models.CharField(max_length=200)
tag = models.CharField(max_length = 200)
price = models.IntegerField(max_length = 20)
link = models.CharField(max_length = 200)
status = models.CharField(max_length = 200)
pub_date = models.DateTimeField('date published')
author = ?

def __unicode__(self):
return self.name

по определению автор заполняет вышеуказанные строки, а строка authot должна принимать login данного пользователя.
Никак не соображу как это сделать.

Офлайн

#2 Ноя. 17, 2014 16:26:28

GreyZmeem
От: Киев
Зарегистрирован: 2013-12-03
Сообщения: 147
Репутация: +  34  -
Профиль   Отправить e-mail  

получить логин пользователя

from django.contrib.auth.models import User
 
class Poll(models.Model):
    name = models.CharField(max_length=200)
    tag = models.CharField(max_length = 200)
    price = models.IntegerField(max_length = 20)
    link = models.CharField(max_length = 200)
    status = models.CharField(max_length = 200)
    pub_date = models.DateTimeField('date published')
    author = models.ForeignKey(User)
 
    def __unicode__(self):
        return self.name

Отредактировано GreyZmeem (Ноя. 17, 2014 16:26:37)

Офлайн

#3 Ноя. 18, 2014 14:08:23

aleksander937
Зарегистрирован: 2014-11-17
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

получить логин пользователя

GreyZmeem в данном есть некоторый изъян…при таком подходе, он предлагает выбрать как автора любого из Зарегистрированных пользователей!!! То есть есть возможность указать в качестве автора и не себя, а вопрос именно в том, чтобы автор определялся автоматически

Прикреплённый файлы:
attachment Снимок экрана от 2014-11-18 15:06:53.png (30,3 KБ)

Офлайн

#4 Ноя. 18, 2014 14:40:32

botinag
Зарегистрирован: 2014-02-20
Сообщения: 179
Репутация: +  35  -
Профиль   Отправить e-mail  

получить логин пользователя

Для админки пробуйте так:

from django.contrib.auth.models import User
 
class Poll(models.Model):
    name = models.CharField(max_length=200)
    tag = models.CharField(max_length = 200)
    price = models.IntegerField(max_length = 20)
    link = models.CharField(max_length = 200)
    status = models.CharField(max_length = 200)
    pub_date = models.DateTimeField('date published')
    author = models.ForeignKey(User)
 
    def __unicode__(self):
        return self.name
 
 
from django.contrib import admin
 
class PollAdmin(admin.ModelAdmin):
    fields = ('name', 'tag', 'price', 'link', 'status')
 
    def save_model(self, request, obj, form, change):
        obj.author = request.user
        obj.save()
 
admin.site.register(Poll, PollAdmin)

Отредактировано botinag (Ноя. 18, 2014 14:42:01)

Офлайн

#5 Ноя. 18, 2014 14:50:51

GreyZmeem
От: Киев
Зарегистрирован: 2013-12-03
Сообщения: 147
Репутация: +  34  -
Профиль   Отправить e-mail  

получить логин пользователя

Еще у ModelAdmin можно переопределить метод get_field_queryset, который будет возвращать нужный queryset для этого поля.

def get_field_queryset(self, db, db_field, request):
    if db_field.name == 'author':
        return User.objects.filter(...)
    return super(PoolAdmin, self).get_field_queryset(db, db_field, request)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version