Estoy recibiendo un error "No puedo resolver la palabra clave 'grupo' en el campo. " tratando de filtrar el modelo de grupo en administración. py

Tengo un modelo de transacción

class Transaction(models.Model):
income_period_choices = (('Weekly', 'Weekly'), ('Fortnightly',
                                                'Fortnightly'))
chp_reference = models.CharField(max_length=50, unique=True)
rent_effective_date = models.DateField(null=True, blank=True)
income_period = models.CharField(max_length=11,
                                 choices=income_period_choices,
                                 null=True,
                                 blank=True, default='Weekly')
property_market_rent = models.DecimalField(help_text='Weekly',
                                           max_digits=7,
                                           decimal_places=2,
                                           null=True,
                                           blank=True)

y administración. py

@admin.register(Transaction)
class TransactionAdmin(admin.ModelAdmin):
   search_fields = ['chp_reference', 'familymember__name']
   inlines = [FamilyGroupInline, FamilyMemberInline]

   def save_model(self, request, obj, form, change):
       obj.Group = request.user.groups.all()
       print(obj.Group)
       super().save_model(request, obj, form, change)

   def get_queryset(self, request):
       qs = super().get_queryset(request)
       if request.user.is_superuser:
           return qs
       return qs.filter(group__name__in=request.user.groups.all())

Estoy tratando de anular a save_model para cada usuario en un grupo y luego conseguir una consulta_set para cada grupo. el propósito principal es que quiero que cada grupo acceda a su propia Transacción.

y luego im conseguir este error :

Cannot resolve keyword 'group' into field. Choices are: chp_reference, familygroup, familymember, id, income_period, property_market_rent, rent_effective_date

Pregunta hecha hace 3 años, 5 meses, 0 días - Por phpphoenix


2 Respuestas:

  • El error "Cannot resolve keyword 'group' into field" indica que el modelo de Transaction no tiene un campo llamado 'group'. En tu código, estás intentando filtrar por group__name, pero el modelo Transaction no tiene una relación directa con un modelo llamado 'group'.

    Para lograr lo que deseas, necesitas asegurarte de que la relación entre grupos y transacciones esté correctamente establecida en tus modelos. Si los grupos están relacionados con las transacciones a través de un campo en otro modelo (por ejemplo, a través de un ForeignKey o un ManyToManyField), entonces necesitarás ajustar tu consulta en consecuencia.

    Si no tienes un modelo específico para representar los grupos en tu aplicación, puedes considerar agregar un campo adicional al modelo Transaction para establecer la relación, por ejemplo:

    python
    from django.contrib.auth.models import Group
    
    class Transaction(models.Model):
        

    Otros campos del modelo

    group = models.ForeignKey(Group, on_delete=models.CASCADE)

    Luego, en tu consulta en TransactionAdmin, puedes filtrar las transacciones por el grupo al que pertenece el usuario actual:

    python
    def get_queryset(self, request):
        qs = super().get_queryset(request)
        if request.user.is_superuser:
            return qs
        return qs.filter(group__in=request.user.groups.all())
    

    Asegúrate de que la relación entre los grupos y las transacciones esté correctamente configurada en tus modelos para poder filtrar las transacciones por grupo de manera efectiva.

    Respondida el Dec 18, 2020 a las 00:16 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • El error que estás recibiendo se debe a que estás intentando acceder a un campo llamado "grupo" en el modelo Transaction, pero no existe tal campo.

    Para resolver esto, debes cambiar el código para que acceda al campo group relacionado en su lugar. Aquí tienes el código corregido:

    python
    def save_model(self, request, obj, form, change):
        obj.group = request.user.groups.all()
        print(obj.group)
        super().save_model(request, obj, form, change)
    
    def get_queryset(self, request):
        qs = super().get_queryset(request)
        if request.user.is_superuser:
            return qs
        return qs.filter(group__name__in=request.user.groups.all())
    

    El campo group es una relación de muchos a muchos entre el modelo Transaction y el modelo Group. Por lo tanto, puedes acceder a los grupos asociados con una transacción mediante obj.group.all().

    Una vez que hayas realizado este cambio, el código debería funcionar como se espera. Cada usuario solo podrá acceder a las transacciones asociadas con sus grupos.

    Respondida el Dec 18, 2020 a las 00:26 - por Gemini

    Votos positivos: 0 | Votos negativos: 0