Python Django get错误:id()只接受一个参数(给定0),使用外键保存

Python Django get错误:id()只接受一个参数(给定0),使用外键保存,python,django,Python,Django,所以我有一个关于如何保存带有外键关系的模型实例的问题 型号.py class Connect(models.Model): username = models.CharField(max_length=255) password = models.CharField(max_length=255,null=True, blank=True) conft = models.TextField(null=True, blank=True) created_at = m

所以我有一个关于如何保存带有外键关系的模型实例的问题

型号.py

class Connect(models.Model):
    username = models.CharField(max_length=255)
    password = models.CharField(max_length=255,null=True, blank=True)
    conft = models.TextField(null=True, blank=True)
    created_at = models.DateTimeField(auto_now_add=True)

    def __unicode__(self):
        return unicode(self.username)


class Ip(models.Model):
    class Meta:
        db_table = 'autonet_ip'

    connect_id = models.ForeignKey(Connect, on_delete=models.CASCADE)
    ipaddr = models.CharField(max_length=255)

    def __str__ (self):
        return self.ipaddr
class NacmForm(ModelForm):
    password = forms.CharField(widget=forms.PasswordInput,required = False)
    class Meta:
        model = Connect
        fields = ['username', 'password','conft']

    labels = {'conft':_('Config'),}

class IpForm(ModelForm):

    class Meta:
        model = Ip
        fields = ['ipaddr']
    labels = {'ipaddr':_('IP address'),}


IpFormset = formset_factory(IpForm,  extra=1)
def konfig(request):
    ip_list = []
    status = ''
    value_bak = 1

    if request.method == 'POST':
        formm = NacmForm(request.POST or None)
        ipform = IpFormset(request.POST)
        upform = UploadForm(request.POST,request.FILES)
        userValue = formm['username'].value()
        passValue = formm['password'].value()
        confValue = formm['conft'].value()
        usernamef = get_object_or_404(Connect, pk=id)
        if ipform.is_valid():
            for form in ipform:
                ipaddr = form.cleaned_data.get('ipaddr')

                //.... some code ...//

                simpanIp = form.save(commit=False)
                simpanIp.connect_id = usernamef
                simpanIp.save()

            simpanForm.save()

        return HttpResponseRedirect('/konfig')
    else:
        formm = NacmForm()
        ipform = IpFormset()
        return render(request, 'konfig.html', {'form': formm, 'logins': Connect.objects.all(), 'ipform': ipform, 'status': status })
forms.py

class Connect(models.Model):
    username = models.CharField(max_length=255)
    password = models.CharField(max_length=255,null=True, blank=True)
    conft = models.TextField(null=True, blank=True)
    created_at = models.DateTimeField(auto_now_add=True)

    def __unicode__(self):
        return unicode(self.username)


class Ip(models.Model):
    class Meta:
        db_table = 'autonet_ip'

    connect_id = models.ForeignKey(Connect, on_delete=models.CASCADE)
    ipaddr = models.CharField(max_length=255)

    def __str__ (self):
        return self.ipaddr
class NacmForm(ModelForm):
    password = forms.CharField(widget=forms.PasswordInput,required = False)
    class Meta:
        model = Connect
        fields = ['username', 'password','conft']

    labels = {'conft':_('Config'),}

class IpForm(ModelForm):

    class Meta:
        model = Ip
        fields = ['ipaddr']
    labels = {'ipaddr':_('IP address'),}


IpFormset = formset_factory(IpForm,  extra=1)
def konfig(request):
    ip_list = []
    status = ''
    value_bak = 1

    if request.method == 'POST':
        formm = NacmForm(request.POST or None)
        ipform = IpFormset(request.POST)
        upform = UploadForm(request.POST,request.FILES)
        userValue = formm['username'].value()
        passValue = formm['password'].value()
        confValue = formm['conft'].value()
        usernamef = get_object_or_404(Connect, pk=id)
        if ipform.is_valid():
            for form in ipform:
                ipaddr = form.cleaned_data.get('ipaddr')

                //.... some code ...//

                simpanIp = form.save(commit=False)
                simpanIp.connect_id = usernamef
                simpanIp.save()

            simpanForm.save()

        return HttpResponseRedirect('/konfig')
    else:
        formm = NacmForm()
        ipform = IpFormset()
        return render(request, 'konfig.html', {'form': formm, 'logins': Connect.objects.all(), 'ipform': ipform, 'status': status })
视图.py

class Connect(models.Model):
    username = models.CharField(max_length=255)
    password = models.CharField(max_length=255,null=True, blank=True)
    conft = models.TextField(null=True, blank=True)
    created_at = models.DateTimeField(auto_now_add=True)

    def __unicode__(self):
        return unicode(self.username)


class Ip(models.Model):
    class Meta:
        db_table = 'autonet_ip'

    connect_id = models.ForeignKey(Connect, on_delete=models.CASCADE)
    ipaddr = models.CharField(max_length=255)

    def __str__ (self):
        return self.ipaddr
class NacmForm(ModelForm):
    password = forms.CharField(widget=forms.PasswordInput,required = False)
    class Meta:
        model = Connect
        fields = ['username', 'password','conft']

    labels = {'conft':_('Config'),}

class IpForm(ModelForm):

    class Meta:
        model = Ip
        fields = ['ipaddr']
    labels = {'ipaddr':_('IP address'),}


IpFormset = formset_factory(IpForm,  extra=1)
def konfig(request):
    ip_list = []
    status = ''
    value_bak = 1

    if request.method == 'POST':
        formm = NacmForm(request.POST or None)
        ipform = IpFormset(request.POST)
        upform = UploadForm(request.POST,request.FILES)
        userValue = formm['username'].value()
        passValue = formm['password'].value()
        confValue = formm['conft'].value()
        usernamef = get_object_or_404(Connect, pk=id)
        if ipform.is_valid():
            for form in ipform:
                ipaddr = form.cleaned_data.get('ipaddr')

                //.... some code ...//

                simpanIp = form.save(commit=False)
                simpanIp.connect_id = usernamef
                simpanIp.save()

            simpanForm.save()

        return HttpResponseRedirect('/konfig')
    else:
        formm = NacmForm()
        ipform = IpFormset()
        return render(request, 'konfig.html', {'form': formm, 'logins': Connect.objects.all(), 'ipform': ipform, 'status': status })
然后,当我输入所有数据并单击提交以收集表单数据时,在
simpanIp.save()
上,我出现了一个错误:
id()只接受一个参数(给定0)。

我只想知道如何用外键将
Connect
model的实例保存到数据库中,提前谢谢


所以我像这样编辑我的models.py

class Connect(models.Model):
......
        def get_usernameinf(self):
            return ', '.join(self.usernameinf.all().values_list('username', flat=True))
if request.method == 'POST':
.....some code.....

if ipform.is_valid() and formm.is_valid():
    simpanForm = formm.save()

    for form in ipform:
    simpanIp = form.save(commit=False)
    ...... some code ..
        simpanIp.connect_id = simpanForm
        simpanIp.save()
还有像这样的views.py

class Connect(models.Model):
......
        def get_usernameinf(self):
            return ', '.join(self.usernameinf.all().values_list('username', flat=True))
if request.method == 'POST':
.....some code.....

if ipform.is_valid() and formm.is_valid():
    simpanForm = formm.save()

    for form in ipform:
    simpanIp = form.save(commit=False)
    ...... some code ..
        simpanIp.connect_id = simpanForm
        simpanIp.save()

而它的工作,现在的结果是我的“connect\u id”从“connect id”中得到了值

id
是Python内置的,它为对象提供了唯一的id。我猜您不打算在这一行上传递它
get\u object\u或\u 404

get_object_or_404(Connect, pk=id)
此函数的调用约定似乎是,它是数据库表中主键的整数。找出应该从何处获取主键并正确设置


专业提示:避免使用Python预定义的名称(有关完整列表,请参阅)。它可能会导致像你刚才那样的头痛。

发布完整的回溯。但是你要传递什么id来获取\u object\u或\u 404?谢谢你的回答,我不再使用get\u object\u或\u 404(Connect,pk=id),我已经编辑了这篇文章,它已经开始工作了