0

I have two tables in my model.py:

class Partner(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=255, blank=True)
    class Meta:
        db_table = 'partner'

class Device(models.Model):
    id = models.AutoField(primary_key=True)
    partner = models.ForeignKey('Partner', null=True, blank=True)
    username = models.CharField(max_length=255, blank=True)
    password = models.CharField(max_length=255, blank=True)
    class Meta:
        db_table = 'device'

I create a View for generic form generation:

class CreateDeviceView(CreateView):
    model = Device
    template_name = 'device_form.html'
    #form_class = DeviceForm

    def get_success_url(self):
        return reverse('partners')

Which I am calling from the urls.py :

 url(r'^device/new', CreateDeviceView.as_view(), name='device-new'),

The template device_form.html is:

<form action="{{ action }}" method="POST">
        {% csrf_token %}
        <ul>
            {{ form.as_p }}
        </ul>
        <input type="submit" class="btn btn-info" value="Save"/>
    </form>

The generated create form has got values in the selection menu (for the foreign keys): Partner Object,Partner Object... How can I get the values in select menu to be Partner.name? I tried to build my own form but I did't get the desired output.

Burhan Khalid
  • 169,990
  • 18
  • 245
  • 284
xplorer00
  • 91
  • 1
  • 4
  • 12

1 Answers1

1

In your Partner model, add a __unicode__ method:

class Partner(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=255, blank=True)

    def __unicode__(self):
        return unicode(self.name)

    class Meta:
        db_table = 'partner'
Burhan Khalid
  • 169,990
  • 18
  • 245
  • 284