Ich lerne Django und versuche, eine einfache Frage-Antwort-App zu erstellen, wo Benutzer auch die Fragen und/oder Antworten mögen können. Nun, was ich tun möchte, ist Spur, die eine bestimmte Frage gemocht/beantworten so habe ich ein separates Modell für die Verfolgung dieses wie folgt:Python Django Modelle Grundlagen
class Votes(models.Model):
answer_id = models.ForeignKey(Answers, related_name='likes_answers', null=True, default=None, db_column='answer_id')
question_id = models.ForeignKey(Questions, related_name='likes_questions', null=True, default=None, db_column='question_id')
likes_count = models.IntegerField(blank=True, default=0)
liked_by = models.ForeignKey(User, related_name='like_user', null=True, default=None, on_delete=models.CASCADE)
Nun ist das Problem mit diesem Ansatz ist, dass jedes Mal eine Frage und eine Antwort Meinung ist uns wichtig Es wird einen Eintrag zu diesem Modell geben, der mehrere Einträge derselben Frage-ID oder Antwort-ID mit verschiedenen Benutzern erstellt. Obwohl die Benutzer unterschiedlich sind, aber eine Menge von answer_ids und question_ids wiederholt werden ... Ist das der richtige Ansatz oder kann ich es besser machen?
Sie sie nicht nennen „answer_id“, sondern einfach „Antwort“. Django fügt automatisch den "_id" -Teil hinter den Kulissen hinzu. Nenne es auch nicht "miked_by", sondern "user" und den zugehörigen Namen "likes", also kannst du 'user.likes.all()' usw. machen. Das gleiche gilt für "answer" und "question". Schließlich sollte das Modell singular immer verwenden, also 'class Vote (models.Model)' und nicht "Votes". – C14L
Danke für den Tipp @ C14L, ich werde mich darum kümmern. Ich habe question_id benutzt, weil ich mit django rest framework serializers arbeite und das möchte ich dem Client als Schlüssel in JSON schicken. Das heißt {{question_id}:}. Wenn ich eine Frage verwende, wird sie als {"question": } gesendet, was verwirrend ist. Gibt es eine Möglichkeit, bei der sich der Schlüssel in Serialisierern vom Feldnamen unterscheidet? –
Ja, das ist der Fall und Sie sollten die "Benennung" für Ihre REST-API-Felder in DRF und nicht auf Datenbankebene vornehmen. – C14L