Django : Обновление ForeignKey автоматически с помощью кнопки 'add'
Используется Python 4.03.
У меня есть две модели, которые соединены, с Asset:
class Asset(models.Model):
Order_Number = models.ForeignKey(Order, on_delete=models.CASCADE, null=True, blank=True)
Asset_QR = models.CharField(max_length=100, default='')
.... more fields below
быть ребенком для Order:
class Order(models.Model):
Order_Number = models.CharField(max_length=100)
Customer = models.CharField(max_length=100, default='')
Customer_Address = models.CharField(max_length=100, default='')
Я пытаюсь создать простую кнопку "Добавить" рядом со списком активов, которые еще не прикреплены ни к одному заказу. Я создал представление:
def attachassets (request, id):
order = Order.objects.get(id=id) #This displays the Order I want to add my assets to
assets = Asset.objects.exclude(Order_Number__isnull=False) #This filters to display only Assets that have no Order assigned
На моей HTML странице я отображаю информацию о заказе, а под ней простую таблицу, которая итерирует активы и имеет кнопку "ADD" рядом с ними:
<table class="table table-hover">
<thead class="thead-dark">
<tr>
<th scope="col">Attach</th>
<th scope="col">Asset</th>
</tr>
</thead>
<tbody>
{%for asset in assets %}
<tr>
<td>
<form action="" method=POST>
{% csrf_token %}
<button type="submit" class = "btn btn-dark", name="add" value={{order.id}}>Add</button>
</td>
<td><a class="btn btn-outline-secondary" name="assetid" value={{asset.id}} href='/asset/{{asset.id}}'>{{asset.Asset_QR}} {{asset.Make}} {{asset.Model}} {{asset.Serial_Number}}</a></td>
</tr>
</form>
{% endfor %}
</tbody>
</table>
Затем в моих Представлениях я попробовал следующее:
if request.method == 'POST':
x = request.POST.get("add")
y = request.POST.get("assetid")
Asset.objects.filter(id = y).update(Order_Number_id = str(x))
return render (request, 'main/attachassets.html', context)
К сожалению, ничего не происходит.
Если я не использую Asset.objects.filter, он действительно работает, но просто обновляет ВСЕ существующие активы с Order.id, который в настоящее время передается через "add".
Я также попробовал Asset.objects.filter(id = int(y)), чтобы превратить assetid в целое число (подумал, что это может не сработать, так как по умолчанию он видит его как строку. Но это дает мне следующую ошибку:
int() аргумент должен быть строкой, байтоподобным объектом или действительным числом, а не 'NoneType'
.
Есть идеи, как заставить это работать?