Я переопределяю save_form для автоматического заполнения поля автора в классе Grievances, используя obj.author = request user.Работает отлично.Но затем, для целей inline, я пытаюсь сделать то же самое, используя obj.status_author = request.user.Не работает - ничего не вводится, и выполнение sql завершается неудачно, так как status_author является обязательным полем.
Успешное переопределение save_form происходит в моем GrievancesAdmin для obj.author.Если я попробую то же самое для obj.status_author, но в GrievanceStatusAdmin (который встроен), он не будет работать как ничего на входе.
У меня есть следующие файлы:
models.py
class Grievances(models.Model):
title = models.CharField(max_length=90)
author = models.ForeignKey(User, related_name='grievance_author')
firefighter = models.ForeignKey(User, related_name='firefighter_harmed')
...
class GrievanceStatus(models.Model):
title = models.ForeignKey(Grievances)
updatetext = models.TextField(blank=True)
action = models.CharField(max_length=20)
status_author = models.ForeignKey(User, related_name='grievance_status_author')
forms.py
class UserModelChoiceField(forms.ModelChoiceField):
""" Override to use full name in ChoiceField """
def label_from_instance(self, obj):
return "%s (%s)" % (obj.get_full_name(), obj.username)
class GrievanceForm(forms.ModelForm):
firefighter = UserModelChoiceField(User.objects.all().order_by('last_name'))
class Meta:
model = Grievances
class GrievanceStatusForm(forms.ModelForm):
class Meta:
model = GrievanceStatus
fields = ('action', 'updatetext', )
admin.py
class GrievanceStatusInline(admin.StackedInline):
model = GrievanceStatus
fk_name = 'title'
form = GrievanceStatusForm
list_select_related = True
class GrievancesAdmin(admin.ModelAdmin):
list_display = ('title', 'firefighter',)
inlines = [ GrievanceStatusInline ]
form = GrievanceForm
def save_formset(self, request, form, formset, change):
### something is wrong with the following line but i'm not sure what ###
obj2 = super(GrievancesAdmin, self).save_formset(request, form, formset, change)
obj2.status_author = request.user
formset.save()
def save_form(self, request, form, change):
obj = super(GrievancesAdmin, self).save_form(request, form, change)
obj.firefighter = User.objects.get(username__exact=obj.firefighter)
obj.status_author = request.user
if not change:
obj.author = request.user
obj.date_updated = datetime.datetime.now()
return obj
admin.site.register(Grievances, GrievancesAdmin)
Спасибо!