2015-08-28 5 views
0

У меня есть модель, Package:Автоматически заполнять поле именем пользователя, создающего объект?

class Package(models.Model): 
    VIP = models.BooleanField() 
    name = models.CharField(max_length=200) 
    contents = models.CharField(max_length=200) 
    owner = # username that created this object 

Всякий раз, когда добавляет новый пользователь Package (через администратора), я хочу, чтобы owner содержать имя пользователя. Как я могу это сделать?

+0

Это слишком расплывчато. Как добавляется «Пакет»? Через форму? Через администратора? –

+0

Нам нужна дополнительная информация по нескольким пунктам: (1.) где вы его создаете (как сказал Шан Ванг)? (2.) Какой пользователь? Другая твоя модель? Подкласс 'auth.User'? Пользовательская модель стороннего пакета? –

+0

Возможный дубликат [В Django, как узнать зарегистрированного пользователя?] (Http://stackoverflow.com/questions/1477319/in-django-how-do-i-know-the-currently-logged -in-user) –

ответ

2

Если вы хотите скрыть поле владельца в администраторе, то исключите поле владельца из администратора модели и установите владельца в методе save_model.

class PackageAdmin(admin.ModelAdmin): 
    exclude = ('owner',) 

    def save_model(self, request, obj, form, change): 
     if not change: 
      # only set owner when object is first created 
      obj.owner = request.user 
     obj.save() 

Если вы хотите сохранить поле владельца формы, а затем переопределить get_changeform_initial_data и добавить владельца в качестве начального значения.

class PackageAdmin(admin.ModelAdmin): 
    def get_changeform_initial_data(self, request): 
     return {'owner': request.user} 

В приведенном выше коде предполагается, что владелец является иностранным ключом к пользовательской модели, который я рекомендую. Если вы действительно хотите сохранить имя пользователя в виде строки, вам необходимо изменить приведенные выше строки:

obj.owner = request.user.username 

return {'owner': request.user.username} 
+0

Это решение. Но я не хочу скрывать поле «владелец» от администратора. Вместо этого я хотел бы, чтобы значением по умолчанию был пользователь, создающий объект в первый раз. Есть ли способ сделать это? * Пожалуйста, если вы найдете способ сделать это, не удаляйте предыдущий ответ, так как он тоже полезен *. – becko

+0

Я добавил альтернативный подход, который сохраняет поле формы владельца. – Alasdair

+0

'get_form' дает мне ошибку:' modelform_factory() получил неожиданный аргумент ключевого слова 'initial''. Вы проверили это? Я использую django 1.7 – becko

Смежные вопросы