有没有办法结合两个表,但是保持第一个表中的行首先出现在结果集中?
例如:
表格1
name surname
-------------------
John Doe
Bob Marley
Ras Tafari
Run Code Online (Sandbox Code Playgroud)
表2
name surname
------------------
Lucky Dube
Abby Arnold
Run Code Online (Sandbox Code Playgroud)
我希望结果集为:
name surname
-------------------
John Doe
Bob Marley
Ras Tafari
Lucky Dube
Abby Arnold
Run Code Online (Sandbox Code Playgroud)
不幸的是,工会以某种方式重新排序表.有没有解决的办法?
有2个简单的模型:
class Question(TimeStampedModel):
text = models.CharField(max_length=40)
class Answer(TimeStampedModel):
question = models.ForeignKey(Question, related_name='answers')
is_agreed = models.BooleanField()
author = models.ForeingKey(User, related_name='answers')
Run Code Online (Sandbox Code Playgroud)
现在,我将描述我的问题.
In [18]: Question.objects.count()
Out[18]: 3
Run Code Online (Sandbox Code Playgroud)
我需要使用'is_user_agreed'和'answers_amount'字段来注释queryset:
In [18]: user = User.objects.first()
In [19]: qs = Question.objects.annotate(
...: is_user_agreed=Case(
...: When(answers__in=user.answers.filter(is_agreed=True), then=Value(True)),
...: When(answers__in=user.answers.filter(is_agreed=False), then=Value(False)),
...: default=Value(None),
...: output_field=NullBooleanField(),
...: ),
...: ).annotate(answers_amount=Count('answers'))
...: qs.count()
Out[19]: 4
Run Code Online (Sandbox Code Playgroud)
^这里的数量是4,但我在db中只有3个问题 :(所以,我试过了distinct()
In [20]: qs.distinct().count()
Out[20]: 4 # but distinct doesn't work
In [21]: qs.distinct('id').count()
Run Code Online (Sandbox Code Playgroud)
在最后一行代码之后我得到了这个例外:
NotImplementedError: annotate() + distinct(fields) is not implemented. …Run Code Online (Sandbox Code Playgroud)