Django 3 ArrayReferenceField in Admin

119 views
Skip to first unread message

Juan David Vallejo Robayo

unread,
May 5, 2022, 3:51:09 PM5/5/22
to djongo
Hi, has someone used ArrayReferenceField in Django 3 Admin, in y case only save one value, some help please.

djongo 1.3.6
django 3.1.2
sqlparse 0.2.4 
pymongo 3.12.0 

Juan David Vallejo Robayo

unread,
May 5, 2022, 3:54:30 PM5/5/22
to djongo
models.py

class Category(models.Model):
    _id = models.ObjectIdField(
        primary_key=True
    )
    name= models.CharField(
        max_length=100,
        verbose_name=_("Nombre")
    )
    image = models.CharField(
        max_length=100,
        verbose_name=_("Imagen"),
        blank=True,
        null=True
    )
    bgcolor = ColorField(
        default='#FF0000',
        verbose_name=_("Color"),
        blank=True,
        null=True
    )
    created_at = models.DateField(
        auto_now_add=True,
        blank=True,
        verbose_name=_("Fecha de creación")
    )

    objects = models.DjongoManager()
     
    @property
    def pk(self):
        return self._id

    def __str__(self):
        return self.name

    def __getitem__(self, name):
        return getattr(self, name)

    class Meta:
        db_table = 'categories'
        verbose_name = _('Categoría')
        verbose_name_plural = _('Categorías')


class Provider(models.Model):
    _id = models.ObjectIdField(
        primary_key=True
    )
    name = models.CharField(
        max_length=100,
        verbose_name=_("Nombre")
    )
    code = models.CharField(
        max_length=100,
        verbose_name=_("Código"),
        blank=True,
        null=True
    )
    description = models.TextField(
        verbose_name=_("Descripción"),
        blank=True,
        null=True
    )
    address = models.CharField(
        max_length=255,
        verbose_name=_("Dirección")
    )
    active= models.BooleanField(
        verbose_name=_("Activo")
    )
    created_at = models.DateField(
        auto_now_add=True,
        blank=True,
        verbose_name=_("Fecha de creación")
    )

    objects = models.DjongoManager()

   
    @property
    def pk(self):
        return self._id

    def __str__(self):
        return self.name

    class Meta:
        db_table = 'providers'
        verbose_name = _('Proveedor')
        verbose_name_plural = _('Proveedores')


class Manufacturer(models.Model):
    _id = models.ObjectIdField()
    name = models.CharField(
        max_length=100,
        verbose_name=_("Nombre")
    )
    description = models.TextField(
        max_length=100,
        verbose_name=_("Descripción"),
        blank=True,
        null=True
    )
    image = models.CharField(
        max_length=100,
        verbose_name=_("Imagen"),
        blank=True,
        null=True
    )
    active = models.BooleanField(
        verbose_name=_("Activo")
    )
    providersId = models.ArrayReferenceField(
        to=Provider,
        default=[],
        on_delete=models.CASCADE,
        verbose_name="Proveedores",
        related_name="manufacturer",
        db_column='providers',
    )
    categoriesId= models.ArrayReferenceField(
        to=Category,
        on_delete=models.CASCADE,
        verbose_name="Categorias",
        db_column='categories',
    )
    created_at = models.DateField(
        auto_now_add=True,
        blank=True,
        verbose_name=_("Fecha de creación")
    )

    objects = models.DjongoManager()

    @property
    def pk(self):
        return self._id

    def __str__(self):
        return self.name

    class Meta:
        db_table = 'manufacturers'
        verbose_name = _('Marca')
        verbose_name_plural = _('Marcas')

admin.py

class ManufacturerForm(forms.ModelForm):
    providersId = forms.ModelMultipleChoiceField(
        queryset=Provider.objects.filter(
            active__in=[True]
        ),
        widget=FilteredSelectMultiple(
            Provider._meta.verbose_name_plural,
            False
        ),
        required=False,
        label=("Proveedores de la marca")
    )
    categoriesId = forms.ModelMultipleChoiceField(
        queryset=Category.objects.filter(
            active__in=[True]
        ),
        widget=FilteredSelectMultiple(
            Category._meta.verbose_name_plural,
            False
        ),
        required=False,
        label=("Categorías de la marca")
    )
   
    class Meta:
        model = Manufacturer
        fields = '__all__'


@admin.register(Manufacturer)
class AdminManufacturer(admin.ModelAdmin):
    list_display = ('name','active','created_at')
    search_fields = ['name']
    form = ManufacturerForm
Reply all
Reply to author
Forward
0 new messages