wszystko. Pracuję nad administratorem mojej witryny django i natknąłem się na przeszkodę.Automatyczny autor w Django admin
Mam model Entry
i model Related
. Model Related
ma dwa obce pola klucza: jeden do modelu Entry
(entry
) i jeden do modelu django User
(author
). Model Related
jest uważany za "podmodel" modelu Entry
, a każdy użytkownik może mieć tylko jeden Related
na Entry
.
W administratorze, Related
jest edytowany inline z Entry
. Jak mam go, administrator przedstawia tylko jeden dodatkowy Related
naraz i automatycznie wypełnia pola author
z bieżącego użytkownika:
from django.contrib import models
from django.contrib.auth.models import User
class Entry(models.Model):
pass
class Related(models.Model):
entry = models.ForeignKey(Entry)
author = models.ForeignKey(User)
class Meta:
unique_together = ('entry', 'author')
from django.contrib import admin
class RelatedInline(admin.StackedInline):
model = Related
exclude = ('author',)
max_num = 1
class EntryAdmin(admin.ModelAdmin):
inlines = (RelatedInline,)
def save_formset(self, request, form, formset, change):
instances = formset.save(commit=False)
for instance in filter(lambda obj: isinstance(obj, Related), instances):
if instance.__dict__.get('author', None) is None:
instance.author = request.user
instance.save()
formset.save_m2m()
Problem polega na tym, że jeśli użytkownik chce edytować wpis, który ma już a Related
przez dowolne, wtedy tylko to powiązane pole zostanie pokazane.
Jeśli to możliwe, zastanawiam się, czy ktoś ma jakieś pomysły na temat tego, w jaki sposób mogę utrzymać konfigurację podobną do tej, ale niech administrator automatycznie wyświetli jego użytkownika related
, jeśli istnieje, a pusty formularz, jeśli nie. Poza tym, po prostu pozbyłbym się linii max_num = 1
i zastąpiłbym ją extra = 1
. Oczywiście oznaczałoby to, że "nowa, powiązana" forma byłaby widoczna, nawet jeśli użytkownik już ją miał dla bieżącego wpisu, więc zastanawiam się, czy ktoś ma jakieś pojęcie o tym, jak złapię możliwą IntegrityError
i niech użytkownik wie, że wystąpił błąd.
Duplikat http://stackoverflow.com/questions/2101979/django-admin-filter-objects-for-inline-formset –
Nie jestem pewien, że jest. – Dave