alle. Ich arbeite am Admin für meine Django-Site und bin auf ein Hindernis gestoßen.Automatischer Autor in Django Admin
Ich habe ein Entry
Modell und ein Related
Modell. Das Related
Modell hat zwei Fremdschlüsselfelder: eins zum Modell Entry
(entry
) und eins zu Djangos User
Modell (author
). Das Modell Related
wird als "Untermodell" des Modells Entry
angesehen, und jeder Benutzer kann nur ein Related
pro Entry
haben.
Im Admin wird Related
inline bearbeitet mit Entry
. Wie ich es habe, zeigt der Administrator nur eine zusätzliches Related
zu einer Zeit, und es füllt automatisch das author
Feld mit dem aktuellen Benutzer:
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()
Das Problem ist, dass, wenn ein Benutzer einen Eintrag bearbeiten, die bereits a Related
von jemand, dann wird nur das eine verwandte Feld angezeigt.
Wenn möglich, frage ich mich, ob jemand irgendwelche Ideen hat, wie ich ein Setup ähnlich halten könnte, aber der Admin automatisch die related
des Benutzers anzeigt, wenn es existiert und ein leeres Formular, wenn es nicht ist. Abgesehen davon würde ich nur die Linie max_num = 1
loswerden und sie durch extra = 1
ersetzen. Natürlich würde dies bedeuten, dass ein "neues verwandtes" Formular auch dann angezeigt würde, wenn der Benutzer bereits einen für den aktuellen Eintrag hatte, also frage ich mich, ob jemand eine Ahnung hat, wie ich einen möglichen IntegrityError
fangen und den Benutzer wissen lassen könnte Fehler ist aufgetreten.
Duplizieren von http://stackoverflow.com/questions/2101979/django-admin-filter-objects-for-inline-formset –
Ich bin nicht sicher, ob es ist. – Dave