Обновление поля foreignkey в Django
имеют следующие модели
Class FootballWebsite(models.Model):
"""Football service website."""
url = models.URLField(validators=[validate_club_url], unique=True)
#Football service
id = models.CharField(primary_key=True, unique=True)
sub_categories = models.ForeignKey(SubCategory, default=1)
class SubCategory(models.Model):
"""Sub Category"""
category = models.ForeignKey(Category)
name = models.CharField(max_length=50)
slug = models.SlugField()
и пытаемся выполнить следующее
class Command(BaseCommand):
def handle(self, *args, **options):
websites = FootballWebsiteDescription.objects.filter(title__in=['title1',' title2'])
for website in websites:
try:
fc = FootballWebsite.objects.filter(id=website.about_id)
fc.sub_categories_id = 88
fc.save()
, а также следующий вариант
fc = FootballWebsite.objects.filter(id=website.about_id).update(sub_categories_id=88)
Насколько я понимаю, оба способа обновления id подкатегории с 1 по умолчанию до 88 должны работать. Я могу обновить другие поля таким образом, по крайней мере, и вижу это как пример, на который можно сослаться где угодно.
я могу найти только эту ссылку Django: Set foreign key using integer? что указывает на то, что я мог столкнуться с ошибкой в моем очень старом проекте Django 1.7.
Я упускаю что-то очень очевидное или есть обходной путь? Очень признателен.
Согласно этому вы не можете обновить внешний ключ с id
Django update on queryset to change ID of ForeignKey
Вы должны сначала запросить экземпляр. Кроме того, у вас уже есть экземпляры сайта, поэтому вам не нужен дополнительный запрос
for website in websites:
sub_category_instance = SubCategory.objects.get(id=some_id)
website.update(sub_categories=sub_category_instance
website.save()