【问题标题】:Django a simple query makes me crazy ''int' object is not iterable'Django 一个简单的查询让我抓狂 ''int' object is not iterable'
【发布时间】:2021-04-05 05:41:17
【问题描述】:

我有两个模型:

class MasterData(models.Model):
    ID = models.AutoField(primary_key=True)
    Companyname = models.CharField('Companyname', max_length=128, blank=True, null=True)
    UserID = models.IntegerField('UserID')

class Prefixes(models.Model):
    ID = models.AutoField(primary_key=True)
    UserID = models.ForeignKey('MasterData', on_delete=models.CASCADE)
    InvoiceNoPrefix = models.CharField('InvoiceNoPrefix', max_length=5, blank=True, null=True)

不,在我看来,我希望创建一个简单的 objects.get_or_create 如果您第一次访问该站点并且如果它创建一个不存在任何记录。

@login_required(login_url='/backend/')
def edit_prefixes(request):
    user_id = request.user.id
    userfrommasterdata = MasterData.objects.filter(UserID__in=user_id)
    prefixes_data = Prefixes.objects.get_or_create(UserID=userfrommasterdata)

我得到的只是一个:'int' object is not iterable

我错过了什么?在我的 MasterData 视图中,它运行良好:

@login_required(login_url='/backend/')
def edit_masterdata(request):
    user_id = request.user.id
    # stamdata_data = get_object_or_404(Stamdata, pk=user_id)

    stamdata_data, _ = MasterData.objects.get_or_create(UserID__iexact=user_id, UserID=user_id)

【问题讨论】:

  • 您需要用方括号将用户 ID 括起来:userfrommasterdata = MasterData.objects.filter(UserID__in=[user_id])

标签: django django-models django-views django-queryset


【解决方案1】:

filter() 将始终为您提供一个 QuerySet,即使只有一个对象与查询匹配 - 在这种情况下,它将是一个包含单个元素的 QuerySet。

如果您知道只有一个对象与您的查询匹配,您可以使用 get() 方法直接返回该对象:

更多信息来自Django Documentation

试试这个: userfrommasterdata = MasterData.objects.filter(UserID=user_id).first()

@login_required(login_url='/backend/')
def edit_prefixes(request):
    user_id = request.user.id
    userfrommasterdata = MasterData.objects.filter(UserID=user_id).first()
    prefixes_data, _ = Prefixes.objects.get_or_create(UserID=userfrommasterdata)

【讨论】:

  • 是的,它有效,但是 .first() 是什么意思?如果我从 django 中删除 MasterData 集并且 user.id 与 masterdata id 不同,我是否总是能获得正确的 UserID?
  • 非常感谢,编码很好:)
猜你喜欢
  • 1970-01-01
  • 2019-04-12
  • 2016-02-18
  • 2022-11-02
  • 1970-01-01
  • 2018-06-29
  • 2020-11-07
  • 2016-01-09
  • 2018-12-10
相关资源
最近更新 更多