【问题标题】:(1242, 'Subquery returns more than 1 row') error in Django?(1242,'子查询返回超过 1 行')Django 中的错误?
【发布时间】:2025-12-21 19:35:12
【问题描述】:

我在 Django 中有一个这样的模型:

class File(models.Model):
    users = models.ForeignKey(User)
    file_name = models.CharField(max_length=100)
    type = models.CharField(max_length=10)
    source = models.CharField(max_length=100)
    start_date = models.TextField()
    end_date = models.TextField()
    duration = models.TextField()
    size = models.TextField()
    flag = models.TextField()
    #delete_date = models.CharField(max_length=100, null=True, blank=True)

class Share(models.Model):
    users = models.ForeignKey(User)
    files = models.ForeignKey(File)
    shared_user_id = models.IntegerField()
    shared_date = models.TextField()

我正在尝试提取登录用户共享的文件。我只是在 Share 中查询

file_s = Share.objects.filter(users_id=log_id)

这会提取登录用户共享的文件。因为,现在我知道登录用户共享了哪个文件,所以我尝试从文件表中获取文件信息:

shared_file = File.objects.filter(users_id=file_s)

但这又回来了:

DatabaseError at /shared_by_me/
(1242, 'Subquery returns more than 1 row')

#my_views
def shared_by_me(request):
    log_id = request.user.id
    username = request.user.username
    #shared_file = File.objects.filter(users_id=file)
    file_s = Share.objects.filter(users_id=log_id)
    shared_file = File.objects.filter(users_id=file_s)
    #b = Share.objects.filter(users_id=log_id)
    return render_to_response('shared_by_me.html', {'shared_by_me':shared_file, 'username':username}, context_instance=RequestContext(request))

#my_template
{% for choice in shared_by_me %}
            <tr class="oddclass">
              <td><input type="checkbox" name="choice" id="choice{{ forloop.counter }}" value="{{ choice.id }}" /></td>
              <td><label for="choice{{ forloop.counter }}">{{ choice.file_name }}</label></td>
              <td>{{ choice.type }}</td>
              <td>{{ i.size }}</td>
              <td>{{ i.end_date }}</td>
            </tr>
{% endfor %}

我做错了什么?

【问题讨论】:

    标签: database django


    【解决方案1】:

    因为file 不是模型而是查询集,您应该使用__in,类似于:

    shared_file = File.objects.filter(users_id__in=file_s)
    

    【讨论】:

    • 感谢您的回答。原来我的查询是错误的。此列表列出了 file_table 中属于 user_id 的所有文件。但我只想列出用户中 shared_by_logged 的​​文件。
    • 我已经回答了您最初的问题:“(1242,'子查询返回超过 1 行')Django 中的错误?”。为您的新问题发布一个新问题。