Как я могу сделать multiselect в выпадающем списке в админке django на данных foreignkey, подобно manytomanyfield?

models.py

from django.db import models

class Images(models.Model):

    def upload_path(instance, filename):
        return '/images/'.join([filename])

    image = models.ImageField(upload_to=upload_path, blank=True, null=True)
    logits = models.BinaryField()
    #customer = models.ForeignKey(Customer ,on_delete=models.DO_NOTHING, default=None)

class Customer(models.Model):
    customer_id = models.BigIntegerField(unique=True)
    first_name = models.CharField(max_length=300)
    last_name = models.CharField(max_length=300)
    images = models.ForeignKey(Images ,on_delete=models.DO_NOTHING, default=None)
    def __str__(self):
        return str(self.customer_id)

Моя проблема в том, что я хочу иметь возможность назначать несколько изображений одному пользователю, что должно быть возможно из-за ForeignKey, но я не могу заставить его работать таким образом.

Мне нужно поле multiselect, как в manytomanyfield, но в поле foreignkey.

Моя проблема в том, что [я] хочу иметь возможность назначать несколько изображений [одному] пользователю, что должно быть возможно из-за ForeignKey, но [я] не могу заставить его работать так.

Нет: ForeignKey - это отношение "многие-к-одному": это означает, что многие Customer могут ссылаться на один и тот же, возможно, единственный Images. Если вы хотите использовать несколько Image, то вам нужно написать ForeignKey в обратном направлении, так:

from django.db import models

class Image(models.Model):

    def upload_path(instance, filename):
        return f'/images/{filename}'

    image = models.ImageField(upload_to=upload_path, blank=True, null=True)
    logits = models.BinaryField()
    customer = models.ForeignKey(
        'Customer',
        on_delete=models.SET_NULL,
        null=True,
        related_name='images'
    )

class Customer(models.Model):
    customer_id = models.BigIntegerField(unique=True)
    first_name = models.CharField(max_length=300)
    last_name = models.CharField(max_length=300)
    
    def __str__(self):
        return f'{self.customer_id}'
Вернуться на верх