@ooker

Как правильно выводить ForeingKey DJANGO?

Добрый день! Вопрос спецам. Есть модель
model.py
class User(models.Model):
    name = models.CharField(max_length=25)

    def __str__(self):
        return self.name

class NewMaster(models.Model):
    CHOICE_FOR_CITY = (
        ('Город1', 'Город1'),
        ('Город2', 'Город2')
    )

    haircut = models.BooleanField(verbose_name='ПАРИКМАХЕРСКАЯ', default=False)
    master_city = models.CharField(choices=CHOICE_FOR_CITY, max_length=25, verbose_name='Выбор города',  # выбор города
                                   help_text="Выбор города", default=False)
    master_streetdate = models.CharField(max_length=50, verbose_name="Улица, дом")  # улица номер дома
    user = models.OneToOneField(User, on_delete=models.CASCADE)

class GalleryPortfolioMaster(models.Model):
    portfolio_image = models.ImageField(upload_to='master/images/porfolio/%Y/%m/%d',
                                        verbose_name="Портфолио фото")  # галерея портфолио
    master_portfolio_photo = models.ForeignKey(User, on_delete=models.CASCADE, related_name='portfolio_image',
                                               verbose_name="Выбрать мастера")
    class Meta:
        verbose_name_plural = 'ГАЛЕРЕЯ ПОРТФОЛИО МАСТЕРА'

view
# Страница поиска мастеров
class MastersView(ListView):  # Страница поиска мастеров
    model = NewMaster
    queryset = NewMaster.objects.all()
    template_name = "catalog/search-master.html"
    paginate_by = 30

    def get_context_data(self, **kwargs):
        context = super(MastersView, self).get_context_data(**kwargs)
        context['portfolio'] = GalleryPortfolioMaster.objects.all()[0:4]

html
{% for post in object_list %}
				<div class="row result-item">
					<div class="col-lg-2 col-md-2 col-sm-2 col-xs-12">
						<div class="result-item-icons">
<div class="result-item-foto">
                            {# вывод фото мастера #}
                            <a href="{{ post.get_absolute_url }}"><img src="/media/{{ post.master_photo }}"></a></div>
						<div class="result-item-stars stars5">5</div>
 {%  for post in portfolio  %}
						<div class="result-item-portfolio-foto"><a data-lightbox="image-1" href="img/foto/portfolio1.jpg"><img src="/media/{{ post.portfolio_image }}"></a></div>
              {% endfor %}
{% endfor %}

Добавляю из админки данные все отображается, но портфолио появляется у всех новых юзеров. Менял на onetoonefield, делал зависимость к разным моделям - все одинаково. Думаю может в шаблоне неправильно показываю.
Хотя в админке джанго когда выбираешь портфолио , есть выбор юзера.
Кто нибудь сталкивался с подобным ?
Неужели все пихать в одну модель?
Спасибо
  • Вопрос задан
  • 63 просмотра
Пригласить эксперта
Ответы на вопрос 1
@buslay
Не понятно, какого вида вы хотите добиться? Что значит "портфолио появляется у всех новых юзеров" ?

Если вы в моделе добавляете ForeingKey-поле, то доступ к нему вшаблоне возможен без дополнительных операций с контекстом во View.
Например
class User(models.Model):
    name = models.CharField(max_length=255)
    profile = models.OneToOneField('Profiles', null=True, blank=True, related_name='user_profile', on_delete=models.PROTECT)

class Profile(models.Model):
    age = models.IntegerField(blank=False, null=False)


в шаблоне или консоли вы можете использовать user.user_profile
{% for user in object_list %}
    User name: {{ user.name }}
         age: {{ user.user_profile.age }}
{% end for %}


во вью достаточно будет
class UsersListView(ListView):  # Страница поиска мастеров
    model = User
    template_name = "catalog/search-master.html"
    paginate_by = 30
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы