Рассмотрим мои models.py
,
PowerPolicy :
class PowerPolicy(models.Model):
name = models.CharField(max_length=15)
...
Группа :
class Group(models.Model):
name = models.CharField(max_length=15)
#But then, we also have:
power_policies = models.ManytoManyField(PowerPolicy)
Player :
class Player(models.Model):
name = models.CharField(max_length=15)
group = models.ForeignKey(Group, on_delete=models.CASCADE)
...
А потом еще одна модель под названием,
UsePower :
class UserPower(models.Model):
player = models.ForeignKey(Player, on_delete=models.CASCADE)
power_policy = models.ForeignKey(PowerPolicy, on_delete=models.CASCADE)
...
Но! Вот подвох: я хочу сделать так, чтобы мой суперпользователь (обратите внимание, что мой суперпользователь не игрок, он просто суперпользователь) может создать только UsePower
объект Power
, указанный в Player
'Group
. Теперь я знаю, что мне нужно создать собственную форму и переопределить набор запросов в поле power_policy
, которое возвращает мой пользовательский набор запросов в соответствии с моими потребностями через функцию.
- Вот как это будет выглядеть:
class UsePowerForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(UsePowerForm, self).__init__(*args, **kwargs)
def MyCustomFunctionThatReturnsTheQuerySet():
This function returns the Power policies that are allowed to the player in
their player Group. The only problem is,
Our little function here doesn't know how to get the player chosen.
could you help
return TheQuerySet
self.fields['power_policy'].queryset = MyCustomFunctionThatReturnsTheQuerySet()
А затем используйте его на сайте администратора, выполнив следующее:
class UsePowerAdmin(admin.ModelAdmin):
form = UsePowerForm
admin.site.register(UsePower, UsePowerForm)
Я действительно надеюсь, что это имеет смысл,и вы, ребята, могли бы помочь мне.
Спасибо за ваше время, прочитав это, я искренне ценю это.
РЕДАКТИРОВАТЬ: Использование очистки формы или проверки во время сохранения, не вариант для меня: (