Sie haben mehrere Möglichkeiten, wie Sie das Problem anzugehen. Ich konzentriere mich auf den Poke-the-Code Ansatz, da es schon eine Weile her ist, seit ich mit Django Internals herumgespielt habe.
Ich habe den entsprechenden Code unten aus dem Link eingefügt. Beachten Sie, dass ich irrelevante Teile entfernt habe. Beachten Sie auch, dass der zu bearbeitende Teil IHREN FALL HIER einen Refactor benötigt.
Folgen Sie dem folgenden Algorithmus, bis Sie zufrieden sind.
- Refactor die
if
Anweisungen abhängig von den Feldern in (eine oder mehrere) separate Funktion (en).
- Fügen Sie den Inspektionscode hinzu, bis Sie herausgefunden haben, welche Felder generischen Beziehungen entsprechen.
- Fügen Sie den Extraktionscode hinzu, bis die generischen Beziehungen befolgt werden.
Test.
def handle_models(self, models, **options):
# SNIP handle options
all = objects
if propagate:
collected = set([(x.__class__, x.pk) for x in all])
while objects:
related = []
for x in objects:
if DEBUG:
print "Adding %s[%s]" % (model_name(x), x.pk)
# follow forward relation fields
for f in x.__class__._meta.fields + x.__class__._meta.many_to_many:
# YOU CASE HERE
if isinstance(f, ForeignKey):
new = getattr(x, f.name) # instantiate object
if new and not (new.__class__, new.pk) in collected:
collected.add((new.__class__, new.pk))
related.append(new)
if isinstance(f, ManyToManyField):
for new in getattr(x, f.name).all():
if new and not (new.__class__, new.pk) in collected:
collected.add((new.__class__, new.pk))
related.append(new)
# SNIP
objects = related
all.extend(objects)
# SNIP serialization
Bitte bearbeiten Frage die entsprechende Quelle aufzunehmen. Ich werde mich nicht bemühen, auf eine andere Website zu klicken, nur um zu sehen, worüber du redest, und es ist schwieriger für jemanden, der das gleiche Problem hat wie du, diese Frage auf diese Weise zu entdecken. –
Sie sollten einige Details zu Ihrem Problem hinzufügen, was genau ist das Problem, das Sie haben? –