Как выбрать несколько записей из отдельной базы данных и добавить в текущую базу данных (сторона администратора) - PullRequest
0 голосов
/ 10 ноября 2019

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

Ниже приведен мой файл models.py

class artists(models.Model):

name = models.CharField(max_length=255, verbose_name="artist",default= "artistsdefault")

def __str__(self):
    return self.name


class song(models.Model):

song_youtube_url = models.URLField(max_length=200,default= "urldefault")

song_num = models.IntegerField(default= 0 )

song_title = models.CharField(max_length=200,default= "titledefault")

artists_included = models.ForeignKey(artists, verbose_name="artists",on_delete=models.CASCADE,default= "artists")

Вышеприведенное работает, но когда я добавляю вручнуюкласс песни в бэкэнде администратора. Я могу выбрать только 1 исполнителя из выпадающего списка?

View of the admin page where I would like to select multiple artists instead of just 1 from the dropdown

Я хотел бы иметь возможность выбратьнесколько исполнителей и сохранить в базе данных песен, выбрав несколько исполнителей из выпадающего, а не только одного.

Ответы [ 2 ]

1 голос
/ 10 ноября 2019

Вам необходимо использовать manytomanyfield вместо внешнего ключа.

Вот ссылка для справки: - https://docs.djangoproject.com/en/2.2/topics/db/examples/many_to_many/

0 голосов
/ 10 ноября 2019
You can create a custom form and use that form in your admin.

For Example:-

forms.py

class ArtistSongForm(forms.ModelForm):
    artist = forms.MultipleChoiceField()

    def __init__(self, *args, **kwargs):
        self.request = kwargs.pop('request', None)
        super(ArtistSongForm, self).__init__(*args, **kwargs)
        self.fields['artists_included'].choices = artists.objects.values_list('id','name')
    class Meta:
        model=song

admin.py

class ArtistSongAdmin(admin.ModelAdmin):
    form  = ArtistSongForm
admin.site.register(song, ArtistSongAdmin)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...