Search code examples
pythondjangoadmin

django admin groups and queryset


I've just created the Developers1, Developers2 groups.. now I've also created the Transaction model, with AdminModel to specify how to list data.

Transacton model:

class Transaction(models.Model):
chp_reference = models.CharField(max_length=50, unique=True)
rent_effective_date = models.DateField(null=True, blank=True)
property_market_rent = models.DecimalField(help_text='Weekly',
                                        max_digits=7,
                                        decimal_places=2,
                                        null=True,
                                        blank=True)
group = models.ForeignKey(Group, on_delete=models.CASCADE)

and this is the admin transaction:

 @admin.register(Transaction)
 class TransactionAdmin(admin.ModelAdmin):
    def save_model(self, request, obj, form, change):
        obj.user = request.user
        super().save_model(request, obj, form, change)

def get_queryset(self, request):
    qs = super().get_queryset(request)
    # for s in qs:
    if request.user.is_superuser:
        return qs
    return qs.filter(group_name__in=Group)

search_fields = ['chp_reference','familymember__name']
inlines = [FamilyGroupInline,FamilyMemberInline]

what im trying to do is i want each group to only access its own Transaction model, and each group can add, delete, update and view their own Transactions only(eg developers1 group cant access developers2 Transactions and vice versa)

thanks!


Solution

  • Try this. (Change is only in the last line)

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