Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 使用表单与包含外键的模型交互_Django_Django Forms - Fatal编程技术网

Django 使用表单与包含外键的模型交互

Django 使用表单与包含外键的模型交互,django,django-forms,Django,Django Forms,所以我试着做一些非常简单的事情,但我已经尝试了好几年,只是自己找不到答案 我正在尝试创建一个表单来添加devicetype。在这种形式下,数据库中应该有一个现有供应商的下拉菜单。唯一的问题是,我似乎无法在表单中显示供应商的名称。而是显示实例名称。“供应商对象(1)”,“供应商对象(2)”。如何更改它以显示名称 以下是我的模型: class Vendors(models.Model): name = models.CharField(max_length=30) class Devic

所以我试着做一些非常简单的事情,但我已经尝试了好几年,只是自己找不到答案

我正在尝试创建一个表单来添加devicetype。在这种形式下,数据库中应该有一个现有供应商的下拉菜单。唯一的问题是,我似乎无法在表单中显示供应商的名称。而是显示实例名称。“供应商对象(1)”,“供应商对象(2)”。如何更改它以显示名称

以下是我的模型:

class Vendors(models.Model):
    name = models.CharField(max_length=30)


class DeviceTypes(models.Model):
    name = models.CharField(max_length=30)
    vendor = models.ForeignKey(Vendors, on_delete=models.PROTECT)
这是我的表格:

class AddDeviceTypeForm(forms.ModelForm):
    """
    Form to add a devicetype to database
    """
    class Meta:
        model = DeviceTypes
        fields = ['name', 'vendor']
我的看法是:

def addDeviceType(request):
    """
    view shows and processes form to add a device type
    """
    form = AddDeviceTypeForm()
    args = {
        'form': form
    }
    return render(request, 'cmdb/addDeviceType.html', args)
我正在用以下内容显示表单:

<form action="" method="post">
    {% csrf_token %}
    {{form}}
    <input type="submit" value="Create" />
</form>

{%csrf_令牌%}
{{form}}

要显示供应商名称,您需要将方法添加到供应商模型中:

class Vendors(models.Model):
    name = models.CharField(max_length=30)
    def __str__(self):
        return self.name

要显示供应商名称,您需要将方法添加到供应商模型:

class Vendors(models.Model):
    name = models.CharField(max_length=30)
    def __str__(self):
        return self.name

谢谢我觉得这应该很简单。谢谢!我觉得这应该很简单。