Ich habe die folgenden Modelle, Ansicht und Vorlage:Django - Wie fügt man Daten zu einem ManyToMany-Feldmodell hinzu?
models.py:
class Batch(models.Model):
material_id = models.ManyToManyField(AssetMetadata)
user = models.ForeignKey(User)
def __str__(self):
return 'Batch_' + str(self.pk) + '_' + self.user.username
class AssetMetadata(models.Model):
material_id = models.CharField(max_length=256, blank=True)
series_title = models.CharField(max_length=256, blank=True)
season_title = models.CharField(max_length=256, blank=True)
season_number = models.IntegerField(default=0)
episode_title = models.CharField(max_length=256, blank=True)
episode_number = models.IntegerField(default=0)
synopsis = models.TextField(max_length=1024, blank=True)
ratings = models.CharField(max_length=256, blank=True)
def __str__(self):
return self.material_id
views.py:
def assets_in_repo(request):
asset_list = AssetMetadata.objects.order_by('id').all()
page = request.GET.get('page', 1)
paginator = Paginator(asset_list, 50)
try:
assets = paginator.page(page)
except PageNotAnInteger:
assets = paginator.page(1)
except EmptyPage:
assets = paginator.page(paginator.num_pages)
if request.method == 'POST':
batch_list = request.POST.getlist('batch')
print(batch_list)
return render(request, 'assets_db/assets.html', {'assets': assets})
Ausschnitt aus Vorlage:
<form method="post">{% csrf_token %}
<input type="submit" value="Create Batch" align="right">
<table class="table table-striped" id="myTable">
<tr>
<th>ID</th>
<th>Material ID</th>
<th>Series Title</th>
<th>Season Tile</th>
<th>Season Number</th>
<th>Episode Title</th>
<th>Episode Number</th>
<th>Create Batch</th>
</tr>
{% for i in assets %}<tr>
<td>{{i.pk}}</td>
<td><a href="/repo/{{ i.id}}">{{i.material_id}}</a></td>
<td>{{i.series_title}}</td>
<td>{{i.season_title}}</td>
<td>{{i.season_number}}</td>
<td>{{i.episode_title}}</td>
<td>{{i.episode_number}}</td>
<td>
<input type="checkbox" name="batch" value="{{i.pk}}">
</td>
</tr>{% endfor %}
</table>
</form>
I Ich versuche, die Daten von der Checkbox zu bekommen und speichern sie in der Batch
Modell.
Der Benutzer wählt Anlagen zum Erstellen einer Charge, das Formular gibt die pk
für diese Anlagen in AssetMetadata
zurück und die Auswahl wird in einer Liste gespeichert, die über batch_list = request.POST.getlist('batch')
erstellt wird. Ich möchte die Daten verwenden, die in dieser Liste gespeichert sind, um einen neuen Eintrag in Batch
zu erstellen, der dann zu dem Element pk
in AssetMetadata
verknüpft.
Ich konnte dies erfolgreich in der Django Admin-Seite tun, aber ich würde dies idealerweise in der Ansicht tun.
Ich habe gelesen https://docs.djangoproject.com/en/1.10/ref/models/relations/ und stackoverflow suchen, aber ich bin ratlos, wie dies zu tun ist.
Randbemerkung, Ihre Definition des Felds 'ID' im Feld 'AssetMetadata' erfüllt definitiv nicht das, was Sie erwarten. Es definiert nur ein Klassenattribut namens "id" mit einem statischen Wert von was auch immer "auto_creation_counter" zum Zeitpunkt des Imports ist. –
Ja, das ist was ich will, im Grunde erhöht es sich, wenn neue Assets zum Archiv hinzugefügt werden. – Lewis909
Aber es * nicht *, das ist mein Punkt. Es ist ein statischer Wert, der für die * Klasse als Ganzes gesetzt ist und beim Import gesetzt wird. Django gibt Modellen automatisch einen Primärschlüsselwert, der automatisch erhöht wird. –