Ich arbeite an einer Django App, wo der Benutzer Dokumente verschiedener Art hochladen kann. Der relevante Teil meiner models.py ist dies:django ForeignKey in einen verwendbaren Verzeichnisnamen konvertieren
class Materials(models.Model):
id = models.AutoField(primary_key=True)
id_presentations = models.ForeignKey(Presentations, db_column='id_Presentations', related_name = "materials_id_presentations") # Field name made lowercase.
materialpathname = 'documents/'
materialpathname += str(id_presentations)
document = models.FileField(db_column='Document', upload_to = materialpathname) # Field name made lowercase.
docname = models.CharField(max_length=40, db_column='DocName') # Field name made lowercase.
class Meta:
db_table = u'Materials'
Meine Absicht ist es, die Dokumente mit einer bestimmten Präsentation zugeordnet zu speichern, in einem Unterverzeichnis mit der ID-Nummer für diese Präsentation (also wenn „Very Important Präsentation "ist in der Datenbank mit der ID 3, sollte es die zugehörigen Materialien an den Standorteinstellungen.MEDIA_ROOT/documents/3/wasauch immer docname.txt).
Während der obige Code "funktioniert", erstellt es jedoch ein Unterverzeichnis, das anstelle von "3" heißt <django.db.models.fields.related.ForeignKey object at 0x8e358ec>
oder so etwas. Ich habe versucht, "id_presentations.name", "id_presentations.value" usw. zu verwenden, aber diese Attribute scheinen nicht zu existieren. Ich kann anscheinend keinen Ort finden, an dem es möglich ist, den ganzzahligen Wert des ForeignKey-Feldes zu erhalten, so dass ich es in einen String umwandeln und als Unterverzeichnisnamen verwenden kann.
Jede Hilfe wird sehr geschätzt.
Dank, sowohl für Ihr Beispiel und den Link (weiß nicht, wie ich es verpasst). Hier ist, was Arbeits endete: def material_path (zB Dateinamen): return 'documents /% d /% s' % (instance.id_presentations.id, Dateiname) (gleiche wie Sie außer Dateinamen von material_path zu beenden fügt) Das speichert schließlich zu [MEDIA_ROOT] /documents/4/somefile.txt, wenn das Dokument somefile.txt mit der Präsentation verknüpft ist, die ID = 4 hat. – rossdavidh