Как связать поля моделей?
Как сделать, чтобы значения поля default_limit модели Group передавались в поле limit модели Limit?
class Group(models.Model):
id = models.BigIntegerField(verbose_name='ID группы', primary_key=True, unique=True)
name = models.CharField(verbose_name='Название', max_length=100)
screen_name = models.CharField(verbose_name='Короткое имя', max_length=100, unique=True)
default_limit = models.IntegerField(verbose_name='Лимит по умолчанию', default=5)
secret = models.CharField(verbose_name='Секретный ключ', max_length=50, null=True, blank=True)
class Meta:
verbose_name = 'группа'
verbose_name_plural = 'группы'
def save(self, force_insert=False, force_update=False, using=None, update_fields=None):
info = api.groups.getById(group_id=self.screen_name)[0]
self.id = info['id']
self.name = info['name']
self.screen_name = info['screen_name']
super().save(force_insert, force_update, using, update_fields)
def __str__(self):
return self.name
def get_url(self):
return f'https://vk.com/{self.screen_name}'
class User(models.Model):
id = models.BigIntegerField(verbose_name='ID пользователя', primary_key=True, unique=True)
first_name = models.CharField(verbose_name='Имя', max_length=50)
last_name = models.CharField(verbose_name='Фамилия', max_length=50)
screen_name = models.CharField(verbose_name='Короткое имя', max_length=100, unique=True)
notation = models.TextField(verbose_name='Доп. информация', null=True, blank=True)
groups = models.ManyToManyField(Group, through='Limit', through_fields=('user', 'group'))
class Meta:
verbose_name = 'пользователь'
verbose_name_plural = 'пользователи'
def __str__(self):
return f'{self.first_name} {self.last_name}'
def get_url(self):
return f'https://vk.com/{self.screen_name}'
def save(self, force_insert=False, force_update=False, using=None, update_fields=None):
info = api.users.get(user_ids=self.screen_name, fields='screen_name')[0]
self.id = info['id']
self.first_name = info['first_name']
self.last_name = info['last_name']
self.screen_name = info['screen_name']
super().save(force_insert, force_update, using, update_fields)
class Limit(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name='Пользователь')
group = models.ForeignKey(Group, on_delete=models.CASCADE, verbose_name='Группа')
is_limited = models.BooleanField(verbose_name='Учитывать лимит?', default=True)
limit = models.IntegerField(verbose_name='Лимит', default=5)
class Meta:
verbose_name = 'лимит'
verbose_name_plural = 'лимиты'
def __str__(self):
return self.user.__str__()