Джанго: предварительный выбор или теги.модельные отношения - PullRequest
0 голосов
/ 25 февраля 2019

Версия Django: 2.1.7

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

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

Как новичок, я бы предположил, что должен сделать несколько новых моделей для каждого вида с отношением ManyToMany?Итак Farmers > <</strong> Species X, Y, Z <<code>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 ]

0 голосов
/ 26 февраля 2019
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)

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

0 голосов
/ 26 февраля 2019

Если мы используем 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 ссылка и можем легко достичь этого.

...