Reputation: 1963
My app allows users to create board and add pictures .
My aim is to try assoicate a board with a primary picture from it's picture list .I'll try my best to explain my situation.I'm trying display with every board a main picture from it's picture list because when a user creates a board he can add pictures to his board and now I want to assoicate one of it's picture to display with the board.
I'l give you an example
So I tried to assoicate the board with a primary picture by using the OneToOneField and I got this error pet_board.picture_id may not be NULL when I create a board
My models.py
class Board(models.Model):
user = models.ForeignKey(User)
name = models.CharField(max_length=100)
picture = models.OneToOneField('Picture',related_name='picture',blank=True,null=True)
def __unicode__(self):
return self.name
class Picture(models.Model):
user = models.ForeignKey(User)
board = models.ForeignKey(Board ,related_name='lo')
image = models.FileField(upload_to="images/",blank=True,null=True)
description = models.TextField()
def __unicode__(self):
return self.description
Upvotes: 2
Views: 641
Reputation: 22808
class Board(models.Model):
user = models.ForeignKey(User)
name = models.CharField(max_length=100)
picture = models.OneToOneField('Picture',related_name='picture',blank=True,null=True)
def __unicode__(self):
return self.name
def primary_picture(self):
return Picture.objects.filter(board=self, is_primary=True)
def ordinary_picture(self):
return Picture.objects.filter(board=self, is_primary=False)
class Picture(models.Model):
user = models.ForeignKey(User)
board = models.ForeignKey(Board ,related_name='lo')
image = models.FileField(upload_to="images/",blank=True,null=True)
description = models.TextField()
is_primary = models.BooleanField(default=False)
def __unicode__(self):
return self.description
{% for b in person.get_board %}
My Primary Pictures:
{% for primary in b.primary_picture %}
<img src="{{ primary.image.url }}">
{% endfor %}
My Ordinary Pictures:
{% for ord in b.ordinary_picture %}
<img src="{{ ord.image.url }}">
{% endfor %}
{% endfor %}
Upvotes: 2
Reputation: 9917
models.py
class Board(models.Model):
user = models.ForeignKey(User)
name = models.CharField(max_length=100)
class Picture(models.Model):
user = models.ForeignKey(User)
board = models.ForeignKey(Board)
image = models.FileField(upload_to="images/",blank=True,null=True)
description = models.TextField()
is_primary = models.BooleanField(default=False)
def __unicode__(self):
return self.description
views.py
def index(request):
obj_board = Board.objects.get(user=request.user)
obj_image = obj_board.picture_set.filter(is_primary=True)
print obj_image.image.url # output url in dev-server for tests
# ... do something and return httpresponse
Upvotes: 2