Django, связывание модели с полем модели другого приложения
Прежде всего, это может быть не лучший способ установки, однако, я учусь на ходу и пытаюсь найти правильный ответ.
У меня есть приложение Account, которое обрабатывает регистрацию пользователя, я добавил параметр couple_choice, который я пытаюсь получить в модели другого приложения.
модель ACCOUNT
class Account(AbstractBaseUser):
COUPLE_CHOICE = Choices('single', 'couple')
email = models.EmailField(verbose_name="email", max_length=60, unique=True)
username = models.CharField(max_length=30, unique=True)
date_joined = models.DateTimeField(verbose_name='date joined', auto_now_add=True)
last_login = models.DateTimeField(verbose_name='last login', auto_now=True)
is_admin = models.BooleanField(default=False)
is_active = models.BooleanField(default=True)
is_staff = models.BooleanField(default=False)
is_superuser = models.BooleanField(default=False)
profile_image = models.ImageField(max_length=255, upload_to=get_profile_image_filepath, null=True, blank=True, default=get_default_profile_image)
hide_email = models.BooleanField(default=True)
couple_choice = models.CharField(choices=COUPLE_CHOICE, default='single', max_length=20)
Затем у меня есть еще одно приложение Profile, которое я хочу сделать парой = к Account.account.couple_choice, или если Account.couple.choice 'couple', то Profile.couple = True
from account.models import Account
class Profile(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE,blank=True, null=True, related_name="swinger")
couple = models.ManyToManyField(Account, to_field="couple_choice", blank=True, null=True,related_name="is_couple", on_delete=models.CASCADE)
Пожалуйста, сообщите мне лучший способ сделать это? Спасибо
Если вы установили Profile.couple = True, вы должны определить couple как boolean. Чтобы достичь цели, вы должны контролировать Account.couple_choise, когда пользователь сохраняет профиль. Вы можете сделать это, если у вас есть класс ModelAdmin в файле admin.py, например
@admin.register(Profile)
class ProfileAdmin(admin.ModelAdmin):
def save_model(self, request, obj, form, change):
if Account.objects.filter(email=request.user.email).exists()
account = Account.objects.get(email=request.user.email)
if account.couple_choice == 'couple'
obj.couple = True
super().save_model(request, obj, form, change)