Есть 2 класса:
class Category (models.Model):
def __repr__(self): return self.title
title = models.CharField('Название', max_length=255)
descr = models.TextField('Описание')
class Meta:
verbose_name = 'Категория'
verbose_name_plural = 'Категории'
class Admin:
list_display = ('title', 'descr')
search_fields = ('title', 'descr')
class Company (models.Model):
def __repr__(self): return self.title
title = models.CharField('Название', max_length=255)
descr = models.TextField('Описание')
address = models.TextField('Адрес')
categories = models.ManyToManyField(Category, verbose_name='Категории')
class Meta:
verbose_name = 'Компания'
verbose_name_plural = 'Компании'
class Admin:
list_display = ('title', 'descr', 'address')
list_filter = ['categories']
search_fields = ('title', 'descr', 'address')
При редактировании компании в админке в списке (<select>) категорий вместо названий - надписи 'Category object'. Как сделать так, чтобы названия появились?
python-2.4.4-6, django-0.96.1-1 из репозитория debian unstable.
Как сделать так, чтобы если в профайле нет записи, соответствующей этому юзеру, она автоматически создавалась? try...except использовать не очень хотелось бы, т.к. подобные выборки используются во многих местах, и в каждом месте простую выборку оборачивать в громоздкую конструкцию try...except...profile.save() не очень хочется
Попробовать сделать так:
class Profile (models.Model):
. . .
def __init__(self, user):
try:
profile = self.objects.get(user=user)
except Profile.DoesNotExist:
profile = Profile(user=user)
profile.save()
Не вышло. Что я делаю не так?
Добавь в конце каждого класса:
def __unicode__(self):
return self.title
ну или что тебе нужно возвращать, примерно вот так будет:
class Disctypes(models.Model):
disctype = models.CharField(maxlength=255)
name = models.CharField(maxlength=255)
class Admin:
pass
def __unicode__(self):
return self.name
>Как сделать так, чтобы если в профайле нет записи, соответствующей этому юзеру, она автоматически создавалась?
class Profile(models.Model):
user = models.ForeignKey(User, unique=True)
comments_on_page = models.DateField(blank=True, null=True)
def save(self):
if not self.id:
self.comments_on_page = 10
super(Profile, self).save()
Или если бы ты использовал версию из svn
class Profile(models.Model):
user = models.ForeignKey(User, unique=True)
comments_on_page = models.DateField(blank=True, null=True, default=10)
http://www.djangoproject.com/documentation/model-api/#default
В 0.96 default поддерживается. Так и делаю:
class Profile(models.Model):
comments_on_page = models.IntegerField('Комментариев на странице', default=20)
Однако, это не совсем в кассу - записи-то все равно не существует, соответственно, значение возвращено не будет.
А если определять save(), тогда запись при вызове save() и будет сохраняться. Мне же нужно немного другое. Мне нужно, чтобы запись создавалась при попытке обращения к ней (т.е. select).
хм... проверил у себя, если указано в модели default - то при регистрации юзера эти поля сами заполняются в базе, а вот как при select это сделать, даже не знаю...
Мы просто немного друг друга недопоняли:-) Все дело в том, что таблиц с профайлами несколько - для каждого модуля своя. Модули могут добавляться /удаляться в любой момент, и юзера в таблице профайла может просто не быть.