[PYTHON] Django order_by notes

Überblick

Umgebung

Annahme

# polls/models.py

class Question(models.Model):

    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')


class Choice(models.Model):

    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)
q1 = Question.objects.get(question_text='question1')
q2 = Question.objects.get(question_text='question2')

Choice.objects.create(question=q1, choice_text='choice1', votes=1)
Choice.objects.create(question=q1, choice_text='choice2', votes=1)
Choice.objects.create(question=q2, choice_text='choice3', votes=1)
Choice.objects.create(question=q2, choice_text='choice4', votes=1)

1. Grenzen Sie die auszuwählenden Spalten ein

--WÄHLEN Sie nur den externen Schlüssel von Choice , question (= question_id)

#Durch Werte drücken--
Choice.objects.values('question')
--SQL ausgeführt werden
mysql> SELECT `polls_choice`.`question_id` FROM `polls_choice`;
+-------------+
| question_id |
+-------------+
|           1 |
|           1 |
|           2 |
|           2 |
+-------------+
4 rows in set (0.00 sec)

2. Fügen Sie zu 1 "different" hinzu

#Entfernen Sie Duplikate mit eindeutigen--
Choice.objects.values('question').distinct()
--SQL ausgeführt werden
mysql> SELECT DISTINCT `polls_choice`.`question_id` FROM `polls_choice`;
+-------------+
| question_id |
+-------------+
|           1 |
|           2 |
+-------------+
2 rows in set (0.00 sec)

――Es wurde ordnungsgemäß dedupliziert

3.2 Addiere order_by zu 2

#Reihenfolge in einem Feld, das sich von dem durch Werte eingegrenzten Feld unterscheidet_durch
Choice.objects.values('question').distinct().order_by('-id')
--SQL ausgeführt werden
--Aus irgendeinem Grund bestellen_Das von angegebene Feld ist AUSGEWÄHLT...
mysql> SELECT DISTINCT `polls_choice`.`question_id`, `polls_choice`.`id` FROM `polls_choice` ORDER BY `polls_choice`.`id` DESC;
+-------------+----+
| question_id | id |
+-------------+----+
|           2 |  4 |
|           2 |  3 |
|           1 |  2 |
|           1 |  1 |
+-------------+----+
4 rows in set (0.00 sec)
class Choice(models.Model):

    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

    class Meta:
        ordering = ('-id',)
Choice.objects.values('question').distinct().order_by()

Felder, die in Django als "order_by" angegeben sind, werden AUSGEWÄHLT

DISTINCT ON kann für Postgres verwendet werden

Choice.objects.values('question').distinct('question').order_by('question', '-id')

Zusammenfassung

Referenz

Recommended Posts

Django order_by notes
JetBrains_learning notes_003
SQL-Notizen
Pandas Notizen
Sphinx-Memo
Django Memo
Jupyter_Lernen Notizen_000
Djangos ImageField
Django Memo