Django 一个简单的查询让我抓狂 ''int' object is not iterable'

Django a simple query makes me crazy ''int' object is not iterable'

我有两个模特:

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' 对象不可迭代

我想念什么?在我的 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)

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

如果您知道只有一个对象与您的查询相匹配,您可以使用直接 returns 对象的 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)