Форум сайта python.su
У меня вопрос довольно простой, но ответа нормального не нашел, поэтому лучше не тратить время на ответы “погугли” или “посмотри в мануале”.
Суть задачки такова: любой зарегистрированный пользователь может добавлять запись в базу данных
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
Офлайн
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)
Офлайн
GreyZmeem в данном есть некоторый изъян…при таком подходе, он предлагает выбрать как автора любого из Зарегистрированных пользователей!!! То есть есть возможность указать в качестве автора и не себя, а вопрос именно в том, чтобы автор определялся автоматически
Прикреплённый файлы: Снимок экрана от 2014-11-18 15:06:53.png (30,3 KБ)
Офлайн
Для админки пробуйте так:
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)
Офлайн
Еще у 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)
Офлайн