Answer the question
In order to leave comments, you need to log in
Get obj in TabularInline form init?
There are two models : User, Message
class Message(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.CASCADE)
content = models.CharField(max_length=5000)
chat_room = models.ForeignKey(ChatRoom,on_delete=models.CASCADE)
class User(AbstractUser):
about = models.CharField(max_length=1000, default="",blank=True)
first_name = models.CharField(_('first name'), max_length=30, blank=False)
last_name = models.CharField(_('last name'), max_length=150, blank=False)
email = models.EmailField(_('email address'), blank=False)
class MessageAdminForm(ModelForm):
class Meta:
model = Message
fields = ('chat_room','content')
class MessageInline(admin.TabularInline):
form = MessageAdminForm
model = Message
class UserAdmin(admin.ModelAdmin):
inlines = [MessageInline]
admin.site.register(User)
class MessageAdminForm(ModelForm):
class Meta:
model = Message
fields = ('chat_room','content')
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
if self.instance:
self.fields['chat_room'].queryset = User.objects.get(pk=?????.id).chatroom_set.all()
Answer the question
In order to leave comments, you need to log in
Let's assume that the ChatRoom model has a many-to-many field called users:
from django.urls import resolve
class MessageInline(admin.TabularInline):
model = Message
def get_user(self, request):
resolved = resolve(request.path_info)
if resolved.args:
return self.parent_model.objects.get(pk=resolved.args[0])
return None
def formfield_for_foreignkey(self, db_field, request, **kwargs):
if db_field.name == "chat_room":
user = self.get_user(request)
if user:
kwargs["queryset"] = ChatRoom.objects.filter(users=user)
return super().formfield_for_foreignkey(db_field, request, **kwargs)
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question