Джанго: предварительный выбор или теги. модельные отношения

Джанго версия 2.1.7

Здравствуйте, у меня есть отношение OneToMany, и я спрашиваю себя, есть ли возможность сделать какой-то предварительный выбор (теги или около того?) Для моих фермеров? Потому что не каждый фермер имеет или хочет куриц, или он специализируется только на коровах. Значит, сейчас, когда я хочу назначить отдельное животное фермеру, я вижу всех фермеров, отображаемых в моем администраторе Django. С ростом числа фермеров это сбивает с толку. Так что я подумал вставить в поле своего рода поле модели Farmers Модель... как chickens = true or not true а также cows = true or not true или ввести новую модель для каждого вида.

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

Как новичок, я бы предположил, что мне нужно сделать несколько новых моделей для каждого вида с отношением ManyToMany? Так Farmers >< Species X, Y, Z < Indiviual Anmial,

Спасибо

class Farmers(models.Model):
name = models.CharField(max_length=100)
farm_img = models.ImageField(upload_to='farm/', max_length=255, null=True, blank=True)
slug_farm = models.SlugField(blank=True)

<...>

class Chickens(models.Model):
farmer = models.ForeignKey(Farmers, on_delete=models.CASCADE, null=True)
chickenname = models.CharField(max_length=100)

<...>

class Cows(models.Model):
farmer = models.ForeignKey(Farmers, on_delete=models.CASCADE, null=True)
cowname = models.CharField(max_length=100)

<...>

class Rabbits(models.Model):
farmer = models.ForeignKey(Farmers, on_delete=models.CASCADE, null=True)
cowname = models.CharField(max_length=100)

<...>

2 ответа

Если мы используем postgres как БД arrayField ссылка может быть хорошим вариантом для выполнения этой работы.

from django.contrib.postgres.fields import ArrayField

class Farmers(models.Model):
   .... necessary fields

    SAMPLE_CHOICES = (
        ('CHICKEN', 'CHICKEN'),
        ('COW, 'COW'),
        ('No Species', 'No Species')
        .....
    )
    choices = ArrayField(
        models.CharField(choices=SAMPLE_CHOICES, max_length=10, blank=True, default='No Species'),
    )

Теперь, когда нам нужно отфильтровать Farmer модель, основанная на выборе, мы можем сделать это следующим образом

Farmer.objects.filter(choices__contains=['cow'])

Обновить

Поскольку вы используете базу данных django-mysql, django-mysql ссылка здесь у нас может быть поле, например, ListField ссылка и может легко достичь этого.

class ChickenFarmers(models.Model):
name = models.CharField(max_length=100)
farm_img = models.ImageField(upload_to='farm/', max_length=255, null=True, blank=True)
slug_farm = models.SlugField(blank=True)

class CowFarmers(models.Model):
name = models.CharField(max_length=100)
farm_img = models.ImageField(upload_to='farm/', max_length=255, null=True, blank=True)
slug_farm = models.SlugField(blank=True)

class RabbitsFarmers(models.Model):
name = models.CharField(max_length=100)
farm_img = models.ImageField(upload_to='farm/', max_length=255, null=True, blank=True)
slug_farm = models.SlugField(blank=True)

class Chickens(models.Model):
farmer = models.ForeignKey(ChickenFarmers, on_delete=models.CASCADE, null=True)
chickenname = models.CharField(max_length=100)



class Cows(models.Model):
farmer = models.ForeignKey(CowFarmers, on_delete=models.CASCADE, null=True)
cowname = models.CharField(max_length=100)



class Rabbits(models.Model):
farmer = models.ForeignKey(RabbitsFarmers, on_delete=models.CASCADE, null=True)
cowname = models.CharField(max_length=100)

'''Я думаю, что на данный момент это даст вам лучшее облегчение' ''

Другие вопросы по тегам