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