sagen, dass ich solche Modelle in Django haben:Holen Sie nur bestimmte Felder von verwandten Objekt in Django
class User(models.Model):
name=models.CharField(...)
email=models.EmailField(...)
photo=...
<other fields>
class Comment(models.Model):
user=models.ForeignKey(User, ...)
Ich habe eine Funktion, die Kommentar-Objekt empfängt und Namen und E-Mail-Felder muss nur E-Mail zu senden (es ist nur Beispiel , offensichtlich)
def sendEmail(comment):
name, email=comment.user.name, comment.user.email
In Implementierung oben dargestellt, wird Django alle Bereiche der zugehörigen Benutzerobjekt (etwas in etwa gleich select * from users where id=comment.user_id
) Mit values_list hole ich gerade benötigten Felder holen kann:
Users.objects.filter(id=comment.user_id).values_list('name', 'email')
aber values_list nur für QuerySet Objekt, beispielsweise zur Modellierung nicht. Meine Frage ist: Gibt es eine Möglichkeit, die gleiche Sache mit nur "Kommentar" -Objekt zu tun? Es muss select name, email from users where id=comment.user_id
durch Komplexität gleich sein (ich will nicht viele Daten in einigen Bereichen über das Netzwerk gespeichert übertragen, wenn ich es nicht brauchen)
Also kurz gesagt, würden Sie die 'ForeignKey' gerne holen das verwandte Objekt nur teilweise ohne die Notwendigkeit eines * expliziten * Querysets? – dhke
@dhke, ja, genau – fantom
Ehrlich gesagt: Hand 'Comment' eine Eigenschaft, die das Ergebnis der obigen Abfrage zurückgibt. Andere Lösungen, die ich erhalte, enden alle in 'contribute_to_class()' mit einem benutzerdefinierten [ForwardManyToOneDescriptor] (https://github.com/django/django/blob/8db6a6c0a1c73bf08e71e00d4ab8c4af3c5f0cb8/django/db/models/fields/related_descriptors.py# L78) und das ist nur Overkill. – dhke