Django - Извлечение или получение данных из выбранного поля внешнего ключа

Относительно новичок в Django, я работаю над проектом Django и пытаюсь получить определенный объект внешнего ключа в переменную, когда он выбран в форме.

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 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'))

Мне нужно увидеть больше конкретики, чтобы дать вам лучший ответ, но есть несколько проблем, которые вы должны решить в первую очередь.

Во-первых, имена классов следует писать с заглавной буквы, а имена полей - со строчной, во-вторых, вы уверены, что хотите сделать поле CharField первичным ключом? Вы можете, но для большинства случаев, автоматически сгенерированный целочисленный pk, который создает Django, будет лучше.

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 
Вернуться на верх