Форум сайта python.su
Допустим есть любая модель, ну например такая:
# models.py
from django.db import models
from django.utils.translation import ugettext_lazy as _
from django.contrib.auth.models import User
class Test(models.Model):
user = models.ForeignKey(User, verbose_name=_('user'))
text = models.CharField(_('text'), max_length=100)
def __unicode__(self):
return self.text
#admin.py
from django.contrib import admin
from test_app.models import Test
class TestAdmin(admin.ModelAdmin):
list_display = ('user', 'text', )
search_fields = ['text', ]
admin.site.register(Test, TestAdmin)
Офлайн
Имхо, проще всего свою кастомную форму прицепить:
https://docs.djangoproject.com/en/dev/ref/contrib/admin/#adding-custom-validation-to-the-admin
А тут обсуждали как в админформе достать юзера:
http://stackoverflow.com/questions/2864955/django-how-to-get-current-user-in-admin-forms
Тобишь будет что-то вроде:
# форма
class TestAdminForm(forms.ModelForm):
class Meta:
model = Test
exclude = ['user',]
def save(self, commit=True, *args, **kwargs):
inst = super(self.__class__, self).save(commit=False)
inst.user = self.current_user
if commit:
inst.save()
return inst
# admin.py
class TestAdmin(admin.ModelAdmin):
list_display = ('user', 'text', )
search_fields = ['text', ]
form = TestAdminForm
def get_form(self, request, obj=None, **kwargs):
form = super(self.__class__, self).get_form(request, obj, **kwargs)
form.current_user = request.user
return form
Отредактировано (Окт. 17, 2011 10:49:46)
Офлайн
pillне работало.
Имхо, проще всего свою кастомную форму прицепить:
https://docs.djangoproject.com/en/dev/ref/contrib/admin/#adding-custom-validation-to-the-admin
А тут обсуждали как в админформе достать юзера:
http://stackoverflow.com/questions/2864955/django-how-to-get-current-user-in-admin-forms
Тобишь будет что-то вроде:Код не тестил, могут быть ляпы :)# форма
class TestAdminForm(forms.ModelForm):
class Meta:
model = Test
exclude = ['user',]
def save(self, commit=True, *args, **kwargs):
inst = super(self.__class__, self).save(commit=False)
inst.user = self.current_user
if commit:
inst.save()
return inst
# admin.py
class TestAdmin(admin.ModelAdmin):
list_display = ('user', 'text', )
search_fields = ['text', ]
form = TestAdminForm
def get_form(self, request, obj=None, **kwargs):
form = super(self.__class__, self).get_form(request, obj, **kwargs)
form.current_user = request.user
return form
def __init__(self, *args, **kwargs):
super(TestAdminForm, self).__init__(*args, **kwargs)
self.fields['user'].initial = self.current_user
self.fields['user'].widget = self.fields['user'].hidden_widget()
Офлайн
apologize828Сколько людей столько и решений, как по мне через инит тоже вполне нормально
теперь работает. хотя может это как то не есть хорошо.
я не понял зачем метод save() что он делает? Поясните пожалуйста.
Отредактировано (Окт. 17, 2011 23:12:07)
Офлайн