Django - 从选定的外键字段中检索或获取数据

Django - Retrieve or get data from selected foreign key field

我是 Django 的新手,我正在开发一个 Django 项目并尝试在 Form 中选择特定外键对象时将其检索到变量中。

model.py

class item_category(models.Model):
    idItemCat = models.CharField(primary_key=True max_length=5)
    nameCategory = models.CharField(max_length=150)

    def __str__(self):
        return self.nameCategory

class item_code(models.Model):
    idItemCat = models.ForeignKey(item_category, on_delete=models.DO_NOTHING)
    idItemCode = models.CharField(primary_key=True, editable=False, max_length=20)

    def __str__(self):
        return self.idItemCode 

我知道我可以通过制作 QuerySet 来检索对象,例如 .objects.last().objects.filter() 或者其他,但它只是从数据库或现有数据中检索对象。我要做的是,当用户提交新数据时,它将根据我在 this Form 中选择的内容检索特定的外键对象,因此我可以将其放入变量中。

知道应该怎么做吗?将不胜感激。

您真的应该看看表格上的 Django Docs。他们很优秀,会教你正确处理表单这个复杂的话题。

直接回答你的问题,好像你已经有了html部分,只要有form标签就可以了,像这样:

<form action='your_view' method='post'>
    ...
</form>

那么在你看来你可以这样做:

def your_view(request):
    if request.method == 'POST':
        category = item_category.objects.get(pk=request.POST.get('name_attribute_of_your_input'))

我需要查看更多细节才能为您提供更好的答案,但您应该先解决几个问题。

首先,您的 class 名称应大写,字段名称应小写,其次,您确定要将 CharField 设为主键吗?可以,但对于大多数情况,Django 创建的自动生成的整数 pk 是最好的。

class ItemCategory(models.Model):
    # Django will create an integer pk for you
    # idItemCat = models.CharField(primary_key=True max_length=5)
    nameCategory = models.CharField(max_length=150)

    def __str__(self):
        return self.nameCategory

class ItemCode(models.Model):
    idItemCat = models.ForeignKey(ItemCategory, on_delete=models.DO_NOTHING)
    # Again, just let Django generate the primary key
    # idItemCode = models.CharField(primary_key=True, editable=False, max_length=20)

    def __str__(self):
        return self.idItemCode