Как я могу получить объекты из этой модели? - PullRequest
0 голосов
/ 01 марта 2019

Я пытаюсь создать адресную модель / views / ..., которая работает, и у меня работает модель, но я пытаюсь получить доступ к данным, которые она содержит, и она не работает.Вот модель:

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    nick_name = models.CharField('Nick name', max_length=30, blank=True, default='')
    bio = models.TextField(max_length=500, blank=True)
    image = models.ImageField(default='default.jpg', upload_to='profile_pics')
    # Address = models.ForeignKey('Address', on_delete=models.CASCADE)

    # If we don't have this, it's going to say profile object only
    def __str__(self):
        return self.user.username
        #return f'{self.user.username}'  # it's going to print username Profile

    def save(self, *args, **kwargs):
            super().save(*args, **kwargs)

            img = Image.open(self.image.path)

            if img.height > 300 or img.width > 300:
                output_size = (300, 300)
                img.thumbnail(output_size)
                img.save(self.image.path)


class Address(models.Model):
    users = models.ManyToManyField(Profile, blank=True)
    name = models.CharField(max_length=30)
    address = models.CharField(max_length=50)
    city = models.CharField(max_length=60, default="Miami")
    state = models.CharField(max_length=30, default="Florida")
    zipcode = models.CharField(max_length=5, default="33165")
    country = models.CharField(max_length=50)

    class Meta:
        verbose_name_plural = 'Address'

    def __str__(self):
        return self.name

Я пытаюсь получить доступ ко всем адресам, которые может иметь пользователь.Я попытался:

# TESTS
allAddresses = Address.objects.all()
print(allAddresses)

и для объектов адреса он дает мне: <QuerySet [<Address: Elizabeth>, <Address: Work>]>

Но если я попытаюсь отфильтровать его по пользователю, как это:

allAddresses = Address.objects.all().filter(users='arturo')
print(allAddresses)

выдает ошибку: invalid literal for int() with base 10: 'arturo'

Может кто-нибудь подсказать мне, как получить все адреса вошедшего в систему пользователя, пожалуйста?

Большое спасибо!

1 Ответ

0 голосов
/ 01 марта 2019

Ограничение фильтра users относится к идентификатору промежуточной таблицы «многие ко многим», следовательно, к ошибке.Вместо этого вы должны указать соответствующие поля полностью, где user относится к полю Profile.user, а username относится к полю User.username:

allAddresses = Address.objects.all().filter(users__user__username='arturo')
...