Добавить атрибут data-id к каждому <option> поля <select> или изменить атрибут value?

Это сайт для тату-салона. У меня есть Artist и Tattoo модели:

class Artist(models.Model):
    first_name  = models.CharField(max_length=50)
    last_name  = models.CharField(max_length=50)
    # etc

class Tattoo(models.Model):
    artist = models.ForeignKey(Artist, on_delete=models.CASCADE)
    name  = models.CharField(max_length=150)
    image = models.ImageField(upload_to='images/')

и ModelForm, предназначенный для того, чтобы художники могли фильтровать татуировки по художнику:

class FilterArtForm(ModelForm):
    class Meta:
        model = Tattoo
        fields = ['artist']

        widgets = {
            'artist': forms.Select(attrs={'id': 'filter_by_artist'}),
        }

Эта форма создаст следующее:

<form>
  <label for="filter_by_artist">Artist:</label></th>
  <select name="artist" id="filter_by_artist" required>
    <option value="" selected>---------</option>
    <option value="1">Artist 1</option>
    <option value="2">Artist 2</option>
  </select>
</form>

Я пытаюсь хранить id каждого объекта Artist в соответствующем поле <option>. Я думал, что мне придется добавить что-то вроде data-artist_id к каждому из них: <option value="1" data-artist_id >Artist 1</option>, но я полагаю, что я мог бы просто изменить атрибут value? Если атрибут value автоматически увеличивается на 1 каждый раз, то кажется, что он всегда должен соответствовать значению id объекта Artist, но мне кажется, что я должен быть более явным, чтобы избежать головной боли в будущем (например, если объект Artist будет удален, а другой добавлен, я не думаю, что эти значения будут больше соответствовать друг другу)? Есть ли способ создать поле в forms.py следующим образом:

 <option value="{{artist.id}}">Artist 1</option>

Спасибо за любую помощь.

Вам не нужно ничего делать. По умолчанию значением является id исполнителя. Эти значения опций вашего выбора являются идентификаторами исполнителей, которых вы зарегистрировали. Это не произвольная нумерация, они уже являются id исполнителя.

Вернуться на верх